"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.findVueComponentImports = void 0;
const path_1 = __importDefault(require("path"));
const es_module_lexer_1 = require("es-module-lexer");
const shared_1 = require("@vue/shared");
const types_1 = require("@babel/types");
const parser_1 = require("@babel/parser");
const constants_1 = require("../constants");
const utils_1 = require("../utils");
/**
 * 暂时没用
 * @param source
 * @param importer
 * @param resolve
 * @returns
 */
async function findVueComponentImports(source, importer, resolve) {
    await es_module_lexer_1.init;
    let imports = [];
    // strip UTF-8 BOM
    if (source.charCodeAt(0) === 0xfeff) {
        source = source.slice(1);
    }
    try {
        imports = (0, es_module_lexer_1.parse)(source)[0];
    }
    catch (e) {
        console.error(e);
    }
    if (!imports.length) {
        return [];
    }
    const rewriteImports = [];
    for (let i = 0; i < imports.length; i++) {
        const importSpecifier = imports[i];
        const { n } = importSpecifier;
        if (!n) {
            continue;
        }
        const extname = path_1.default.extname(n);
        // 仅处理没有后缀,或后缀是.vue,.nvue的文件
        if (extname && !constants_1.EXTNAME_VUE.includes(extname)) {
            continue;
        }
        const res = await resolve(n, importer);
        if (!res) {
            continue;
        }
        if (constants_1.EXTNAME_VUE_RE.test(res.id)) {
            const expr = (0, parser_1.parse)(source.slice(importSpecifier.ss, importSpecifier.se), {
                plugins: (0, utils_1.normalizeParsePlugins)(res.id),
                sourceType: 'module',
            }).program.body[0];
            if ((0, types_1.isImportDeclaration)(expr) && expr.specifiers.length === 1) {
                const importDefaultSpecifier = expr.specifiers[0];
                if (!(0, types_1.isImportDefaultSpecifier)(importDefaultSpecifier)) {
                    continue;
                }
                rewriteImports.push((0, shared_1.extend)(importSpecifier, {
                    n: res.id,
                    i: importDefaultSpecifier.local.name,
                }));
            }
        }
    }
    return rewriteImports;
}
exports.findVueComponentImports = findVueComponentImports;