GOOD SHELL MAS BOY
Server: Apache/2.4.52 (Ubuntu)
System: Linux vmi1836763.contaboserver.net 5.15.0-130-generic #140-Ubuntu SMP Wed Dec 18 17:59:53 UTC 2024 x86_64
User: www-data (33)
PHP: 8.4.10
Disabled: NONE
Upload Files
File: //usr/local/lib/node_modules/firebase-tools/lib/commands/ext-dev-init.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.command = void 0;
const marked_1 = require("marked");
const marked_terminal_1 = require("marked-terminal");
const checkMinRequiredVersion_1 = require("../checkMinRequiredVersion");
const command_1 = require("../command");
const config_1 = require("../config");
const error_1 = require("../error");
const prompt_1 = require("../prompt");
const logger_1 = require("../logger");
const npmDependencies = require("../init/features/functions/npm-dependencies");
const templates_1 = require("../templates");
marked_1.marked.use((0, marked_terminal_1.markedTerminal)());
function readCommonTemplates() {
    return {
        integrationTestFirebaseJsonTemplate: (0, templates_1.readTemplateSync)("extensions/integration-test.json"),
        integrationTestEnvTemplate: (0, templates_1.readTemplateSync)("extensions/integration-test.env"),
        extSpecTemplate: (0, templates_1.readTemplateSync)("extensions/extension.yaml"),
        preinstallTemplate: (0, templates_1.readTemplateSync)("extensions/PREINSTALL.md"),
        postinstallTemplate: (0, templates_1.readTemplateSync)("extensions/POSTINSTALL.md"),
        changelogTemplate: (0, templates_1.readTemplateSync)("extensions/CL-template.md"),
    };
}
exports.command = new command_1.Command("ext:dev:init")
    .description("initialize files for writing an extension in the current directory")
    .before(checkMinRequiredVersion_1.checkMinRequiredVersion, "extDevMinVersion")
    .action(async (options) => {
    const cwd = options.cwd || process.cwd();
    const config = new config_1.Config({}, { projectDir: cwd, cwd: cwd });
    try {
        let welcome;
        const lang = await (0, prompt_1.promptOnce)({
            type: "list",
            name: "language",
            message: "In which language do you want to write the Cloud Functions for your extension?",
            default: "javascript",
            choices: [
                {
                    name: "JavaScript",
                    value: "javascript",
                },
                {
                    name: "TypeScript",
                    value: "typescript",
                },
            ],
        });
        switch (lang) {
            case "javascript": {
                await javascriptSelected(config);
                welcome = (0, templates_1.readTemplateSync)("extensions/javascript/WELCOME.md");
                break;
            }
            case "typescript": {
                await typescriptSelected(config);
                welcome = (0, templates_1.readTemplateSync)("extensions/typescript/WELCOME.md");
                break;
            }
            default: {
                throw new error_1.FirebaseError(`${lang} is not supported.`);
            }
        }
        await npmDependencies.askInstallDependencies({ source: "functions" }, config);
        return logger_1.logger.info("\n" + (0, marked_1.marked)(welcome));
    }
    catch (err) {
        if (!(err instanceof error_1.FirebaseError)) {
            throw new error_1.FirebaseError(`Error occurred when initializing files for new extension: ${(0, error_1.getErrMsg)(err)}`, {
                original: (0, error_1.getError)(err),
            });
        }
        throw err;
    }
});
async function typescriptSelected(config) {
    const packageLintingTemplate = (0, templates_1.readTemplateSync)("extensions/typescript/package.lint.json");
    const packageNoLintingTemplate = (0, templates_1.readTemplateSync)("extensions/typescript/package.nolint.json");
    const tsconfigTemplate = (0, templates_1.readTemplateSync)("extensions/typescript/tsconfig.json");
    const tsconfigDevTemplate = (0, templates_1.readTemplateSync)("extensions/typescript/tsconfig.dev.json");
    const indexTemplate = (0, templates_1.readTemplateSync)("extensions/typescript/index.ts");
    const integrationTestTemplate = (0, templates_1.readTemplateSync)("extensions/typescript/integration-test.ts");
    const gitignoreTemplate = (0, templates_1.readTemplateSync)("extensions/typescript/_gitignore");
    const mocharcTemplate = (0, templates_1.readTemplateSync)("extensions/typescript/_mocharc");
    const eslintTemplate = (0, templates_1.readTemplateSync)("init/functions/typescript/_eslintrc");
    const lint = await (0, prompt_1.promptOnce)({
        name: "lint",
        type: "confirm",
        message: "Do you want to use ESLint to catch probable bugs and enforce style?",
        default: true,
    });
    const templates = readCommonTemplates();
    await config.askWriteProjectFile("extension.yaml", templates.extSpecTemplate);
    await config.askWriteProjectFile("PREINSTALL.md", templates.preinstallTemplate);
    await config.askWriteProjectFile("POSTINSTALL.md", templates.postinstallTemplate);
    await config.askWriteProjectFile("CHANGELOG.md", templates.changelogTemplate);
    await config.askWriteProjectFile("functions/.mocharc.json", mocharcTemplate);
    await config.askWriteProjectFile("functions/src/index.ts", indexTemplate);
    await config.askWriteProjectFile("functions/integration-tests/integration-test.spec.ts", integrationTestTemplate);
    await config.askWriteProjectFile("functions/integration-tests/firebase.json", templates.integrationTestFirebaseJsonTemplate);
    await config.askWriteProjectFile("functions/integration-tests/extensions/greet-the-world.env", templates.integrationTestEnvTemplate);
    if (lint) {
        await config.askWriteProjectFile("functions/package.json", packageLintingTemplate);
        await config.askWriteProjectFile("functions/.eslintrc.js", eslintTemplate);
    }
    else {
        await config.askWriteProjectFile("functions/package.json", packageNoLintingTemplate);
    }
    await config.askWriteProjectFile("functions/tsconfig.json", tsconfigTemplate);
    if (lint) {
        await config.askWriteProjectFile("functions/tsconfig.dev.json", tsconfigDevTemplate);
    }
    await config.askWriteProjectFile("functions/.gitignore", gitignoreTemplate);
}
async function javascriptSelected(config) {
    const indexTemplate = (0, templates_1.readTemplateSync)("extensions/javascript/index.js");
    const integrationTestTemplate = (0, templates_1.readTemplateSync)("extensions/javascript/integration-test.js");
    const packageLintingTemplate = (0, templates_1.readTemplateSync)("extensions/javascript/package.lint.json");
    const packageNoLintingTemplate = (0, templates_1.readTemplateSync)("extensions/javascript/package.nolint.json");
    const gitignoreTemplate = (0, templates_1.readTemplateSync)("extensions/javascript/_gitignore");
    const eslintTemplate = (0, templates_1.readTemplateSync)("init/functions/javascript/_eslintrc");
    const lint = await (0, prompt_1.promptOnce)({
        name: "lint",
        type: "confirm",
        message: "Do you want to use ESLint to catch probable bugs and enforce style?",
        default: false,
    });
    const templates = readCommonTemplates();
    await config.askWriteProjectFile("extension.yaml", templates.extSpecTemplate);
    await config.askWriteProjectFile("PREINSTALL.md", templates.preinstallTemplate);
    await config.askWriteProjectFile("POSTINSTALL.md", templates.postinstallTemplate);
    await config.askWriteProjectFile("CHANGELOG.md", templates.changelogTemplate);
    await config.askWriteProjectFile("functions/index.js", indexTemplate);
    await config.askWriteProjectFile("functions/integration-tests/integration-test.spec.js", integrationTestTemplate);
    await config.askWriteProjectFile("functions/integration-tests/firebase.json", templates.integrationTestFirebaseJsonTemplate);
    await config.askWriteProjectFile("functions/integration-tests/extensions/greet-the-world.env", templates.integrationTestEnvTemplate);
    if (lint) {
        await config.askWriteProjectFile("functions/package.json", packageLintingTemplate);
        await config.askWriteProjectFile("functions/.eslintrc.js", eslintTemplate);
    }
    else {
        await config.askWriteProjectFile("functions/package.json", packageNoLintingTemplate);
    }
    await config.askWriteProjectFile("functions/.gitignore", gitignoreTemplate);
}