unplugin-preprocessor-directives

  • Version 1.2.0
  • Published
  • 246 kB
  • 5 dependencies
  • MIT license

Install

npm i unplugin-preprocessor-directives
yarn add unplugin-preprocessor-directives
pnpm add unplugin-preprocessor-directives

Overview

<img src="assets/logo.svg" alt="logo" width="100" height="100" align="right" />

Index

Variables

variable comments

const comments: Comment[];

    variable ifDirective

    const ifDirective: Directive<IfToken, IfStatement>;

      variable includeDirective

      const includeDirective: Directive<IncludeToken, IncludeStatement>;

        variable MessageDirective

        const MessageDirective: Directive<MessageToken, MessageStatement>;

          variable theDefineDirective

          const theDefineDirective: Directive<DefineToken, DefineStatement>;

            variable unplugin

            const unplugin: unplugin0.UnpluginInstance<UserOptions, boolean>;

              variable unpluginFactory

              const unpluginFactory: UnpluginFactory<UserOptions>;

                Functions

                function createProgramNode

                createProgramNode: (body?: SimpleNode[]) => ProgramNode;

                  function defineDirective

                  defineDirective: <T extends SimpleToken, N extends SimpleNode>(
                  directive: Directive<T, N>
                  ) => Directive<T, N>;

                    function findComment

                    findComment: (type: string) => Comment;

                      function isComment

                      isComment: (line: string) => boolean;

                        function parseComment

                        parseComment: (line: string) => { type: string | undefined; content: string };

                          function resolveConditional

                          resolveConditional: (test: string, env?: NodeJS.ProcessEnv) => boolean;

                            function resolveOptions

                            resolveOptions: (options?: UserOptions) => Required<UserOptions>;

                              function simpleMatchToken

                              simpleMatchToken: <T = SimpleToken>(
                              comment: string,
                              regex: RegExp
                              ) => T | undefined;

                                function sortUserDirectives

                                sortUserDirectives: (
                                directives: ObjectDirective[]
                                ) => [ObjectDirective[], ObjectDirective[], ObjectDirective[]];

                                  Classes

                                  class CodeGenerator

                                  class CodeGenerator extends Generator {}
                                  • 纯代码生成器 从 AST 节点生成代码字符串,不依赖 MagicString

                                  method append

                                  append: (code: string) => void;
                                  • 添加代码片段到生成结果

                                  method generate

                                  static generate: (
                                  node: SimpleNode,
                                  generates?: (Generate | undefined)[],
                                  options?: CodeGeneratorOptions
                                  ) => string;
                                  • 静态方法:从 AST 节点生成代码

                                  method handleCodeStatement

                                  protected handleCodeStatement: (node: SimpleNode) => void;
                                  • 处理 CodeStatement 节点

                                  method handleGeneratorResult

                                  protected handleGeneratorResult: (node: SimpleNode, result: string) => void;
                                  • 处理自定义生成器返回的结果

                                  method handleKeepNode

                                  protected handleKeepNode: (node: SimpleNode) => void;
                                  • 保留节点(用于 unhandled: 'keep' 策略)

                                  class Context

                                  class Context {}

                                    constructor

                                    constructor(options?: UserOptions);

                                      property directives

                                      directives: ObjectDirective<SimpleToken, SimpleNode>[];

                                        property env

                                        env: Record<string, any>;

                                          property filter

                                          filter: (id: string) => boolean;

                                            property generates

                                            generates: Generate[];

                                              property lexers

                                              lexers: Lex<SimpleToken>[];

                                                property logger

                                                logger: Logger;

                                                  property options

                                                  options: Required<UserOptions>;

                                                    property parsers

                                                    parsers: Parse<SimpleToken, SimpleNode>[];

                                                      property transforms

                                                      transforms: Transform<SimpleNode, SimpleNode>[];

                                                        method loadEnv

                                                        loadEnv: (mode?: string) => Record<string, string>;

                                                          method transform

                                                          transform: (code: string, id: string) => string | undefined;

                                                            method transformWithMap

                                                            transformWithMap: (
                                                            code: string,
                                                            id: string
                                                            ) => { map: magic_string0.SourceMap; code: string };

                                                              class Generator

                                                              abstract class Generator {}
                                                              • 生成器基类 提供通用的 AST 遍历和节点处理逻辑

                                                              constructor

                                                              constructor(
                                                              node: SimpleNode,
                                                              generates?: Generate[],
                                                              options?: GeneratorOptions
                                                              );

                                                                property generates

                                                                readonly generates: Generate[];

                                                                  property node

                                                                  readonly node: SimpleNode;

                                                                    property options

                                                                    protected readonly options: GeneratorOptions;

                                                                      method handleCodeStatement

                                                                      protected abstract handleCodeStatement: (node: SimpleNode) => void;
                                                                      • 处理 CodeStatement 节点 子类需要实现此方法

                                                                      method handleGeneratorResult

                                                                      protected abstract handleGeneratorResult: (
                                                                      node: SimpleNode,
                                                                      result: string
                                                                      ) => void;
                                                                      • 处理自定义生成器的结果 子类需要实现此方法

                                                                      method handleKeepNode

                                                                      protected abstract handleKeepNode: (node: SimpleNode) => void;
                                                                      • 保留节点(用于 unhandled: 'keep' 策略) 子类需要实现此方法

                                                                      method handleUnprocessedNode

                                                                      protected handleUnprocessedNode: (node: SimpleNode) => void;
                                                                      • 处理未被任何生成器处理的节点

                                                                      method walk

                                                                      walk: (node: SimpleNode) => void;
                                                                      • 遍历 AST 节点

                                                                      class Lexer

                                                                      class Lexer {}

                                                                        constructor

                                                                        constructor(code: string, lexers?: Lex<SimpleToken>[]);

                                                                          property code

                                                                          code: string;

                                                                            property current

                                                                            current: number;

                                                                              property lexers

                                                                              lexers: Lex<SimpleToken>[];

                                                                                property tokens

                                                                                tokens: SimpleToken[];

                                                                                  method lex

                                                                                  static lex: (code: string, lexers?: Lex[]) => SimpleToken[];

                                                                                    class MsGenerator

                                                                                    class MsGenerator extends Generator {}
                                                                                    • 基于 MagicString 的代码转换器 用于在现有源码基础上进行修改和删除操作

                                                                                    constructor

                                                                                    constructor(
                                                                                    node: SimpleNode,
                                                                                    generates: Generate[],
                                                                                    s: MagicString,
                                                                                    options?: GeneratorOptions
                                                                                    );

                                                                                      property s

                                                                                      readonly s: MagicString;

                                                                                        method generate

                                                                                        static generate: (
                                                                                        node: SimpleNode,
                                                                                        generates: (Generate | undefined)[] | undefined,
                                                                                        s: MagicString,
                                                                                        options?: GeneratorOptions
                                                                                        ) => void;
                                                                                        • 静态方法:基于 MagicString 转换代码

                                                                                          Parameter node

                                                                                          AST 节点

                                                                                          Parameter generates

                                                                                          生成器函数数组

                                                                                          Parameter s

                                                                                          MagicString 实例

                                                                                          Parameter options

                                                                                          选项

                                                                                        method handleCodeStatement

                                                                                        protected handleCodeStatement: (node: SimpleNode) => void;
                                                                                        • 处理 CodeStatement 节点

                                                                                        method handleGeneratorResult

                                                                                        protected handleGeneratorResult: (node: SimpleNode, result: string) => void;
                                                                                        • 处理自定义生成器返回的结果

                                                                                        method handleKeepNode

                                                                                        protected handleKeepNode: (node: SimpleNode) => void;
                                                                                        • 保留节点(用于 unhandled: 'keep' 策略)

                                                                                        method keep

                                                                                        keep: (node: SimpleNode) => void;

                                                                                          method replace

                                                                                          replace: (node: SimpleNode, code: string) => void;

                                                                                            class Parser

                                                                                            class Parser {}

                                                                                              constructor

                                                                                              constructor(tokens: SimpleToken[], parsers?: Parse<SimpleToken, SimpleNode>[]);

                                                                                                property ast

                                                                                                ast: ProgramNode;

                                                                                                  property current

                                                                                                  current: number;

                                                                                                    property parsers

                                                                                                    parsers: Parse<SimpleToken, SimpleNode>[];

                                                                                                      property tokens

                                                                                                      tokens: SimpleToken[];

                                                                                                        method parse

                                                                                                        static parse: (tokens: SimpleToken[], parsers?: Parse[]) => ProgramNode;

                                                                                                          method walk

                                                                                                          walk: () =>
                                                                                                          | CodeStatement
                                                                                                          | { comment: string; type: string; start: number; end: number };

                                                                                                            Interfaces

                                                                                                            interface CodeGeneratorOptions

                                                                                                            interface CodeGeneratorOptions extends GeneratorOptions {}

                                                                                                              interface CodeStatement

                                                                                                              interface CodeStatement extends SimpleNode {}

                                                                                                                property type

                                                                                                                type: 'CodeStatement';

                                                                                                                  property value

                                                                                                                  value: string;

                                                                                                                    interface CodeToken

                                                                                                                    interface CodeToken extends SimpleToken {}

                                                                                                                      property type

                                                                                                                      type: 'code';

                                                                                                                        property value

                                                                                                                        value: string;

                                                                                                                          interface Comment

                                                                                                                          interface Comment {}

                                                                                                                            property end

                                                                                                                            end: string;

                                                                                                                              property regex

                                                                                                                              regex: RegExp;

                                                                                                                                property start

                                                                                                                                start: string;

                                                                                                                                  property type

                                                                                                                                  type: string;

                                                                                                                                    interface DefineStatement

                                                                                                                                    interface DefineStatement extends SimpleNode {}

                                                                                                                                      property kind

                                                                                                                                      kind: 'define' | 'undef';

                                                                                                                                        property type

                                                                                                                                        type: 'DefineStatement';

                                                                                                                                          property value

                                                                                                                                          value: string;

                                                                                                                                            interface DefineToken

                                                                                                                                            interface DefineToken extends SimpleToken {}

                                                                                                                                              property type

                                                                                                                                              type: 'define' | 'undef';

                                                                                                                                                property value

                                                                                                                                                value: string;

                                                                                                                                                  interface FunctionDirective

                                                                                                                                                  interface FunctionDirective<T = SimpleToken, N = SimpleNode> {}

                                                                                                                                                    call signature

                                                                                                                                                    (context: Context): ObjectDirective<T, N>;

                                                                                                                                                      interface GeneratorOptions

                                                                                                                                                      interface GeneratorOptions {}

                                                                                                                                                        property unhandled

                                                                                                                                                        unhandled?: UnhandledPolicy;

                                                                                                                                                          interface IfStatement

                                                                                                                                                          interface IfStatement extends SimpleNode {}

                                                                                                                                                            property alternate

                                                                                                                                                            alternate: SimpleNode[];

                                                                                                                                                              property consequent

                                                                                                                                                              consequent: SimpleNode[];

                                                                                                                                                                property kind

                                                                                                                                                                kind: IfToken['type'];

                                                                                                                                                                  property test

                                                                                                                                                                  test: string;

                                                                                                                                                                    property type

                                                                                                                                                                    type: 'IfStatement';

                                                                                                                                                                      interface IfToken

                                                                                                                                                                      interface IfToken extends SimpleToken {}

                                                                                                                                                                        property type

                                                                                                                                                                        type: 'if' | 'else' | 'elif' | 'endif';

                                                                                                                                                                          property value

                                                                                                                                                                          value: string;

                                                                                                                                                                            interface IncludeStatement

                                                                                                                                                                            interface IncludeStatement extends SimpleNode {}

                                                                                                                                                                              property sourceFile

                                                                                                                                                                              sourceFile?: string;

                                                                                                                                                                                property type

                                                                                                                                                                                type: 'IncludeStatement';

                                                                                                                                                                                  property value

                                                                                                                                                                                  value: string;

                                                                                                                                                                                    interface IncludeToken

                                                                                                                                                                                    interface IncludeToken extends SimpleToken {}

                                                                                                                                                                                      property type

                                                                                                                                                                                      type: 'include';

                                                                                                                                                                                        property value

                                                                                                                                                                                        value: string;

                                                                                                                                                                                          interface MessageStatement

                                                                                                                                                                                          interface MessageStatement extends SimpleNode {}

                                                                                                                                                                                            property kind

                                                                                                                                                                                            kind: 'error' | 'warning' | 'info';

                                                                                                                                                                                              property type

                                                                                                                                                                                              type: 'MessageStatement';

                                                                                                                                                                                                property value

                                                                                                                                                                                                value: string;

                                                                                                                                                                                                  interface MessageToken

                                                                                                                                                                                                  interface MessageToken extends SimpleToken {}

                                                                                                                                                                                                    property type

                                                                                                                                                                                                    type: 'error' | 'warning' | 'info';

                                                                                                                                                                                                      property value

                                                                                                                                                                                                      value: string;

                                                                                                                                                                                                        interface MsGeneratorOptions

                                                                                                                                                                                                        interface MsGeneratorOptions extends GeneratorOptions {}

                                                                                                                                                                                                          interface ObjectDirective

                                                                                                                                                                                                          interface ObjectDirective<T = SimpleToken, N = SimpleNode> {}
                                                                                                                                                                                                          • Represents an object-based directive configuration for preprocessing.

                                                                                                                                                                                                            T - The type of token produced by the lexer, defaults to SimpleToken N - The type of AST node produced by the parser, defaults to SimpleNode

                                                                                                                                                                                                            {('pre' | 'post')} [enforce] - Optional enforcement phase for when the directive should be applied {Lex} lex - Lexical analyzer function that tokenizes the input {Parse<T, N>} parse - Parser function that converts tokens into AST nodes {Transform} transform - Transformation function that modifies AST nodes {Generate} generate - Code generation function that produces the final output

                                                                                                                                                                                                          property enforce

                                                                                                                                                                                                          enforce?: 'pre' | 'post';

                                                                                                                                                                                                            property generate

                                                                                                                                                                                                            generate?: Generate;

                                                                                                                                                                                                              property lex

                                                                                                                                                                                                              lex: Lex<T>;

                                                                                                                                                                                                                property parse

                                                                                                                                                                                                                parse: Parse<T, N>;

                                                                                                                                                                                                                  property transform

                                                                                                                                                                                                                  transform: Transform<N>;

                                                                                                                                                                                                                    interface Options

                                                                                                                                                                                                                    interface Options {}

                                                                                                                                                                                                                      property cwd

                                                                                                                                                                                                                      cwd: string;

                                                                                                                                                                                                                        property directives

                                                                                                                                                                                                                        directives: Directive[];

                                                                                                                                                                                                                          property exclude

                                                                                                                                                                                                                          exclude: FilterPattern;

                                                                                                                                                                                                                            property include

                                                                                                                                                                                                                            include: FilterPattern;

                                                                                                                                                                                                                              interface ProgramNode

                                                                                                                                                                                                                              interface ProgramNode extends SimpleNode {}

                                                                                                                                                                                                                                property body

                                                                                                                                                                                                                                body: SimpleNode[];

                                                                                                                                                                                                                                  property type

                                                                                                                                                                                                                                  type: 'Program';

                                                                                                                                                                                                                                    interface SimpleNode

                                                                                                                                                                                                                                    interface SimpleNode {}

                                                                                                                                                                                                                                      property comment

                                                                                                                                                                                                                                      comment?: string;

                                                                                                                                                                                                                                        property end

                                                                                                                                                                                                                                        end?: number;

                                                                                                                                                                                                                                          property start

                                                                                                                                                                                                                                          start?: number;

                                                                                                                                                                                                                                            property type

                                                                                                                                                                                                                                            type: string;

                                                                                                                                                                                                                                              index signature

                                                                                                                                                                                                                                              [x: string]: any;

                                                                                                                                                                                                                                                interface SimpleToken

                                                                                                                                                                                                                                                interface SimpleToken {}

                                                                                                                                                                                                                                                  property comment

                                                                                                                                                                                                                                                  comment?: string;

                                                                                                                                                                                                                                                    property end

                                                                                                                                                                                                                                                    end?: number;

                                                                                                                                                                                                                                                      property start

                                                                                                                                                                                                                                                      start?: number;

                                                                                                                                                                                                                                                        property type

                                                                                                                                                                                                                                                        type: string;

                                                                                                                                                                                                                                                          property value

                                                                                                                                                                                                                                                          value: string;

                                                                                                                                                                                                                                                            index signature

                                                                                                                                                                                                                                                            [x: string]: any;

                                                                                                                                                                                                                                                              interface UserOptions

                                                                                                                                                                                                                                                              interface UserOptions extends Partial<Options> {}

                                                                                                                                                                                                                                                                Type Aliases

                                                                                                                                                                                                                                                                type Directive

                                                                                                                                                                                                                                                                type Directive<T = SimpleToken, N = SimpleNode> =
                                                                                                                                                                                                                                                                | ObjectDirective<T, N>
                                                                                                                                                                                                                                                                | FunctionDirective<T, N>;

                                                                                                                                                                                                                                                                  type Generate

                                                                                                                                                                                                                                                                  type Generate = (
                                                                                                                                                                                                                                                                  this: Generator,
                                                                                                                                                                                                                                                                  ast: SimpleNode,
                                                                                                                                                                                                                                                                  comment?: Comment
                                                                                                                                                                                                                                                                  ) => string | void;

                                                                                                                                                                                                                                                                    type Lex

                                                                                                                                                                                                                                                                    type Lex<T = SimpleToken> = (this: Lexer, currentLine: string) => T | void;

                                                                                                                                                                                                                                                                      type Parse

                                                                                                                                                                                                                                                                      type Parse<T = SimpleToken, N = SimpleNode> = (
                                                                                                                                                                                                                                                                      this: Parser,
                                                                                                                                                                                                                                                                      currentToken: T
                                                                                                                                                                                                                                                                      ) => N | void;

                                                                                                                                                                                                                                                                        type Transform

                                                                                                                                                                                                                                                                        type Transform<N = SimpleNode, ResultN = SimpleNode> = (
                                                                                                                                                                                                                                                                        this: Transformer,
                                                                                                                                                                                                                                                                        currentNode: N
                                                                                                                                                                                                                                                                        ) => ResultN | void;

                                                                                                                                                                                                                                                                          Package Files (2)

                                                                                                                                                                                                                                                                          Dependencies (5)

                                                                                                                                                                                                                                                                          Dev Dependencies (18)

                                                                                                                                                                                                                                                                          Peer Dependencies (8)

                                                                                                                                                                                                                                                                          Badge

                                                                                                                                                                                                                                                                          To add a badge like this onejsDocs.io badgeto your package's README, use the codes available below.

                                                                                                                                                                                                                                                                          You may also use Shields.io to create a custom badge linking to https://www.jsdocs.io/package/unplugin-preprocessor-directives.

                                                                                                                                                                                                                                                                          • Markdown
                                                                                                                                                                                                                                                                            [![jsDocs.io](https://img.shields.io/badge/jsDocs.io-reference-blue)](https://www.jsdocs.io/package/unplugin-preprocessor-directives)
                                                                                                                                                                                                                                                                          • HTML
                                                                                                                                                                                                                                                                            <a href="https://www.jsdocs.io/package/unplugin-preprocessor-directives"><img src="https://img.shields.io/badge/jsDocs.io-reference-blue" alt="jsDocs.io"></a>