'use strict';

const jsx = require('./jsx.cjs');
const typescript = require('./typescript.cjs');

// @ts-nocheck
/**
 * @import {Refractor} from '../lib/core.js'
 */
tsx.displayName = 'tsx';
tsx.aliases = [];

/** @param {Refractor} Prism */
function tsx(Prism) {
  Prism.register(jsx);
  Prism.register(typescript)
  ;(function (Prism) {
    var typescript = Prism.util.clone(Prism.languages.typescript);
    Prism.languages.tsx = Prism.languages.extend('jsx', typescript);

    // doesn't work with TS because TS is too complex
    delete Prism.languages.tsx['parameter'];
    delete Prism.languages.tsx['literal-property'];

    // This will prevent collisions between TSX tags and TS generic types.
    // Idea by https://github.com/karlhorky
    // Discussion: https://github.com/PrismJS/prism/issues/2594#issuecomment-710666928
    var tag = Prism.languages.tsx.tag;
    tag.pattern = RegExp(
      /(^|[^\w$]|(?=<\/))/.source + '(?:' + tag.pattern.source + ')',
      tag.pattern.flags
    );
    tag.lookbehind = true;
  })(Prism);
}

module.exports = tsx;
