Documentation
    Preparing search index...

    Module @map-colonies/eslint-plugin

    @map-colonies/eslint-plugin

    Custom ESLint rules for MapColonies projects. This plugin provides specialized rules to enforce best practices and prevent common mistakes.

    npm install --save-dev @map-colonies/eslint-plugin
    

    Add the plugin to your ESLint configuration:

    // eslint.config.mjs
    import mapColoniesPlugin from '@map-colonies/eslint-plugin';

    export default [
    mapColoniesPlugin.configs['pino-safety'],
    // ... your other configs
    ];

    Or configure rules individually:

    // eslint.config.mjs
    import mapColoniesPlugin from '@map-colonies/eslint-plugin';

    export default [
    {
    plugins: {
    '@map-colonies': mapColoniesPlugin,
    },
    rules: {
    '@map-colonies/pino-safety/no-swallowed-args': 'error',
    '@map-colonies/pino-safety/prefer-standard-error-key': 'warn',
    },
    },
    ];

    Prevents Pino from silently swallowing objects when arguments don't match the message format placeholders.

    Problem: Pino uses printf-style formatting. If you pass extra arguments without corresponding placeholders (%s, %d, etc.), they are silently ignored.

    Examples:

    // ❌ Bad - object is swallowed (no placeholder)
    logger.info('User logged in', { userId: 123 });

    // ❌ Bad - second argument is swallowed (only one %s placeholder)
    logger.info('User %s logged in', username, { extra: 'data' });

    // ✅ Good - merge object pattern (object first)
    logger.info({ userId: 123 }, 'User logged in');

    // ✅ Good - placeholders match argument count
    logger.info('User %s logged in at %d', username, timestamp);

    // ✅ Good - no extra arguments
    logger.info('Simple message');

    Supported placeholders: %s, %d, %f, %i, %j, %o, %O

    Ensures errors are serialized correctly by using Pino's standard err key instead of error.

    Problem: Pino's default error serializer looks for the err key. Using error means the error won't be properly serialized with stack traces.

    Examples:

    // ❌ Bad - "error" key won't be serialized properly
    logger.error({ error: new Error('Failed') }, 'Operation failed');

    // ✅ Good - "err" key uses Pino's error serializer
    logger.error({ err: new Error('Failed') }, 'Operation failed');

    // ✅ Good - other property names are fine
    logger.info({ userId: 123, status: 'active' }, 'User info');

    Enables all Pino safety rules with recommended severity levels:

    • pino-safety/no-swallowed-args: error
    • pino-safety/prefer-standard-error-key: warn
    pnpm run build
    
    pnpm run test
    
    pnpm run lint
    

    MIT

    Variables

    default
    noSwallowedArgs
    preferStandardErrorKey