PHP 7.4.33
Preview: display-name.js Size: 8.92 KB
/var/www/uibuilder.cmshelp.dk/httpdocs/node_modules/eslint-plugin-react/lib/rules/display-name.js
/**
 * @fileoverview Prevent missing displayName in a React component definition
 * @author Yannick Croissant
 */

'use strict';

const values = require('object.values');
const filter = require('es-iterator-helpers/Iterator.prototype.filter');
const forEach = require('es-iterator-helpers/Iterator.prototype.forEach');

const Components = require('../util/Components');
const isCreateContext = require('../util/isCreateContext');
const astUtil = require('../util/ast');
const componentUtil = require('../util/componentUtil');
const docsUrl = require('../util/docsUrl');
const testReactVersion = require('../util/version').testReactVersion;
const propsUtil = require('../util/props');
const report = require('../util/report');

// ------------------------------------------------------------------------------
// Rule Definition
// ------------------------------------------------------------------------------

const messages = {
  noDisplayName: 'Component definition is missing display name',
  noContextDisplayName: 'Context definition is missing display name',
};

/** @type {import('eslint').Rule.RuleModule} */
module.exports = {
  meta: {
    docs: {
      description: 'Disallow missing displayName in a React component definition',
      category: 'Best Practices',
      recommended: true,
      url: docsUrl('display-name'),
    },

    messages,

    schema: [{
      type: 'object',
      properties: {
        ignoreTranspilerName: {
          type: 'boolean',
        },
        checkContextObjects: {
          type: 'boolean',
        },
      },
      additionalProperties: false,
    }],
  },

  create: Components.detect((context, components, utils) => {
    const config = context.options[0] || {};
    const ignoreTranspilerName = config.ignoreTranspilerName || false;
    const checkContextObjects = (config.checkContextObjects || false) && testReactVersion(context, '>= 16.3.0');

    const contextObjects = new Map();

    /**
     * Mark a prop type as declared
     * @param {ASTNode} node The AST node being checked.
     */
    function markDisplayNameAsDeclared(node) {
      components.set(node, {
        hasDisplayName: true,
      });
    }

    /**
     * Checks if React.forwardRef is nested inside React.memo
     * @param {ASTNode} node The AST node being checked.
     * @returns {boolean} True if React.forwardRef is nested inside React.memo, false if not.
     */
    function isNestedMemo(node) {
      return astUtil.isCallExpression(node)
        && node.arguments
        && astUtil.isCallExpression(node.arguments[0])
        && utils.isPragmaComponentWrapper(node);
    }

    /**
     * Reports missing display name for a given component
     * @param {Object} component The component to process
     */
    function reportMissingDisplayName(component) {
      if (
        testReactVersion(context, '^0.14.10 || ^15.7.0 || >= 16.12.0')
        && isNestedMemo(component.node)
      ) {
        return;
      }

      report(context, messages.noDisplayName, 'noDisplayName', {
        node: component.node,
      });
    }

    /**
     * Reports missing display name for a given context object
     * @param {Object} contextObj The context object to process
     */
    function reportMissingContextDisplayName(contextObj) {
      report(context, messages.noContextDisplayName, 'noContextDisplayName', {
        node: contextObj.node,
      });
    }

    /**
     * Checks if the component have a name set by the transpiler
     * @param {ASTNode} node The AST node being checked.
     * @returns {boolean} True if component has a name, false if not.
     */
    function hasTranspilerName(node) {
      const namedObjectAssignment = (
        node.type === 'ObjectExpression'
        && node.parent
        && node.parent.parent
        && node.parent.parent.type === 'AssignmentExpression'
        && (
          !node.parent.parent.left.object
          || node.parent.parent.left.object.name !== 'module'
          || node.parent.parent.left.property.name !== 'exports'
        )
      );
      const namedObjectDeclaration = (
        node.type === 'ObjectExpression'
        && node.parent
        && node.parent.parent
        && node.parent.parent.type === 'VariableDeclarator'
      );
      const namedClass = (
        (node.type === 'ClassDeclaration' || node.type === 'ClassExpression')
        && node.id
        && !!node.id.name
      );

      const namedFunctionDeclaration = (
        (node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression')
        && node.id
        && !!node.id.name
      );

      const namedFunctionExpression = (
        astUtil.isFunctionLikeExpression(node)
        && node.parent
        && (node.parent.type === 'VariableDeclarator' || node.parent.type === 'Property' || node.parent.method === true)
        && (!node.parent.parent || !componentUtil.isES5Component(node.parent.parent, context))
      );

      if (
        namedObjectAssignment || namedObjectDeclaration
        || namedClass
        || namedFunctionDeclaration || namedFunctionExpression
      ) {
        return true;
      }
      return false;
    }

    // --------------------------------------------------------------------------
    // Public
    // --------------------------------------------------------------------------

    return {
      ExpressionStatement(node) {
        if (checkContextObjects && isCreateContext(node)) {
          contextObjects.set(node.expression.left.name, { node, hasDisplayName: false });
        }
      },
      VariableDeclarator(node) {
        if (checkContextObjects && isCreateContext(node)) {
          contextObjects.set(node.id.name, { node, hasDisplayName: false });
        }
      },
      'ClassProperty, PropertyDefinition'(node) {
        if (!propsUtil.isDisplayNameDeclaration(node)) {
          return;
        }
        markDisplayNameAsDeclared(node);
      },

      MemberExpression(node) {
        if (!propsUtil.isDisplayNameDeclaration(node.property)) {
          return;
        }
        if (
          checkContextObjects
          && node.object
          && node.object.name
          && contextObjects.has(node.object.name)
        ) {
          contextObjects.get(node.object.name).hasDisplayName = true;
        }
        const component = utils.getRelatedComponent(node);
        if (!component) {
          return;
        }
        markDisplayNameAsDeclared(astUtil.unwrapTSAsExpression(component.node));
      },

      'FunctionExpression, FunctionDeclaration, ArrowFunctionExpression'(node) {
        if (ignoreTranspilerName || !hasTranspilerName(node)) {
          return;
        }
        if (components.get(node)) {
          markDisplayNameAsDeclared(node);
        }
      },

      MethodDefinition(node) {
        if (!propsUtil.isDisplayNameDeclaration(node.key)) {
          return;
        }
        markDisplayNameAsDeclared(node);
      },

      'ClassExpression, ClassDeclaration'(node) {
        if (ignoreTranspilerName || !hasTranspilerName(node)) {
          return;
        }
        markDisplayNameAsDeclared(node);
      },

      ObjectExpression(node) {
        if (!componentUtil.isES5Component(node, context)) {
          return;
        }
        if (ignoreTranspilerName || !hasTranspilerName(node)) {
          // Search for the displayName declaration
          node.properties.forEach((property) => {
            if (!property.key || !propsUtil.isDisplayNameDeclaration(property.key)) {
              return;
            }
            markDisplayNameAsDeclared(node);
          });
          return;
        }
        markDisplayNameAsDeclared(node);
      },

      CallExpression(node) {
        if (!utils.isPragmaComponentWrapper(node)) {
          return;
        }

        if (node.arguments.length > 0 && astUtil.isFunctionLikeExpression(node.arguments[0])) {
          // Skip over React.forwardRef declarations that are embedded within
          // a React.memo i.e. React.memo(React.forwardRef(/* ... */))
          // This means that we raise a single error for the call to React.memo
          // instead of one for React.memo and one for React.forwardRef
          const isWrappedInAnotherPragma = utils.getPragmaComponentWrapper(node);
          if (
            !isWrappedInAnotherPragma
            && (ignoreTranspilerName || !hasTranspilerName(node.arguments[0]))
          ) {
            return;
          }

          if (components.get(node)) {
            markDisplayNameAsDeclared(node);
          }
        }
      },

      'Program:exit'() {
        const list = components.list();
        // Report missing display name for all components
        values(list).filter((component) => !component.hasDisplayName).forEach((component) => {
          reportMissingDisplayName(component);
        });
        if (checkContextObjects) {
          // Report missing display name for all context objects
          forEach(
            filter(contextObjects.values(), (v) => !v.hasDisplayName),
            (contextObj) => reportMissingContextDisplayName(contextObj)
          );
        }
      },
    };
  }),
};

Directory Contents

Dirs: 0 × Files: 312
Name Size Perms Modified Actions
126 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
161 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
12.97 KB lrw-r--r-- 2025-03-28 11:04:36
Edit Download
122 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
153 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
4.42 KB lrw-r--r-- 2025-03-28 11:04:36
Edit Download
144 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
197 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.46 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
137 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
183 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.39 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
131 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
171 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
9.66 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
119 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
147 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
8.92 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
129 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
167 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
7.59 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
123 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
155 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.12 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
122 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
153 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.13 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
132 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
172 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.63 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
124 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
157 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
8.65 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
127 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
163 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.06 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
136 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
181 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
8.22 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
121 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
151 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
7.19 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
129 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
167 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.93 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
6.33 KB lrw-r--r-- 2025-03-28 11:04:38
Edit Download
224 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
6.19 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
124 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
157 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
4.41 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
132 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
173 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
2.85 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
135 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
179 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
10.75 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
131 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
171 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.68 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
131 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
171 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
13.56 KB lrwxr-xr-x 2025-03-28 11:04:37
Edit Download
124 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
157 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
5.98 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
124 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
157 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
14.45 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
125 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
159 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.54 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
129 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
167 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.16 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
130 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
169 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
2.67 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
120 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
149 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
6.88 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
124 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
157 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
6.20 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
123 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
155 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
6.42 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
117 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
143 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
14.34 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
114 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
137 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
9.93 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
120 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
149 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
4.04 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
129 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
167 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
4.06 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
118 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
145 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
4.93 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
118 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
145 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
6.03 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
131 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
171 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
1.80 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
140 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
189 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
7.37 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
129 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
167 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
1.66 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
127 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
163 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
7.44 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
926 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
128 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
16.52 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
124 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
157 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
4.06 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
126 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
161 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
10.76 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
119 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
147 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.08 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
130 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
169 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
6.85 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
134 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
177 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
7.76 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
122 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
153 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
4.49 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
132 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
173 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.81 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
132 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
173 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
1.49 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
129 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
167 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
4.08 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
129 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
167 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
5.50 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
121 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
151 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
17.81 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
131 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
171 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
2.98 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
122 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
153 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
10.43 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
121 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
150 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
1.54 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
120 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
149 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
1.62 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
126 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
161 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
8.24 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
134 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
177 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
6.63 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
134 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
177 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.07 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
125 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
159 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
7.33 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
134 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
177 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
5.04 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
123 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
155 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.88 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
130 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
169 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
5.07 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
116 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
141 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
2.63 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
120 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
149 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
9.73 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
129 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
166 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
308 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
130 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
168 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
310 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
131 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
171 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
4.48 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
123 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
155 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
1.36 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
132 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
174 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
16.21 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
120 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
149 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
1.49 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
120 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
149 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
2.02 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
119 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
147 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
1.70 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
137 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
183 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.21 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
143 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
195 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
2.38 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
129 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
167 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
2.25 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
119 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
147 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
2.32 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
121 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
151 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.68 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
121 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
151 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
1.29 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
115 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
139 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
8.72 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
128 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
165 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
4.66 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
126 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
162 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
27.31 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
116 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
141 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
4.34 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
136 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
181 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
15.15 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
140 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
189 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
6.64 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
127 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
163 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
4.78 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
122 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
153 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
15.78 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
131 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
170 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
441 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
123 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
155 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
1.54 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
125 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
159 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
4.93 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
129 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
167 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.00 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
132 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
173 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
12.65 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
117 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
143 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
7.24 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
125 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
159 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
1.30 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
128 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
165 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
7.19 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
127 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
163 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
6.91 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
128 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
165 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
3.16 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
124 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
157 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
2.86 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
116 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
141 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
13.41 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
125 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
159 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
5.11 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
122 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
153 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
9.92 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
127 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
163 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
1.88 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
132 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
173 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
6.58 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
124 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
157 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
4.04 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
136 B lrw-r--r-- 2025-03-28 11:04:38
Edit Download
181 B lrw-r--r-- 2025-03-28 11:04:37
Edit Download
4.04 KB lrw-r--r-- 2025-03-28 11:04:37
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).