import '../../../../../micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/index.mjs';
import { factorySpace } from '../../../../../micromark-factory-space@1.1.0/node_modules/micromark-factory-space/index.mjs';
import '../../../../../micromark-util-character@1.2.0/node_modules/micromark-util-character/index.mjs';
import { blankLine } from '../../../../../micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/blank-line.mjs';
import { content } from '../../../../../micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/content.mjs';

/**
 * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct
 * @typedef {import('micromark-util-types').Initializer} Initializer
 * @typedef {import('micromark-util-types').State} State
 * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext
 */

/** @type {InitialConstruct} */
const flow = {
  tokenize: initializeFlow
};

/**
 * @this {TokenizeContext}
 * @type {Initializer}
 */
function initializeFlow(effects) {
  const self = this;
  const initial = effects.attempt(
    // Try to parse a blank line.
    blankLine,
    atBlankEnding,
    // Try to parse initial flow (essentially, only code).
    effects.attempt(
      this.parser.constructs.flowInitial,
      afterConstruct,
      factorySpace(
        effects,
        effects.attempt(
          this.parser.constructs.flow,
          afterConstruct,
          effects.attempt(content, afterConstruct)
        ),
        'linePrefix'
      )
    )
  );
  return initial

  /** @type {State} */
  function atBlankEnding(code) {
    if (code === null) {
      effects.consume(code);
      return
    }
    effects.enter('lineEndingBlank');
    effects.consume(code);
    effects.exit('lineEndingBlank');
    self.currentConstruct = undefined;
    return initial
  }

  /** @type {State} */
  function afterConstruct(code) {
    if (code === null) {
      effects.consume(code);
      return
    }
    effects.enter('lineEnding');
    effects.consume(code);
    effects.exit('lineEnding');
    self.currentConstruct = undefined;
    return initial
  }
}

export { flow };
//# sourceMappingURL=flow.mjs.map
