UNPKG

qcobjects-cli

Version:

qcobjects cli command line tool

8 lines (7 loc) 20.8 kB
{ "version": 3, "sources": ["../../src/cli-commands-build-esbuild.ts"], "sourcesContent": ["/**\n * QCObjects CLI 2.5\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QuickCorp/QCObjects is licensed under the\n * GNU Lesser General Public License v3.0\n * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)\n *\n * Permissions of this copyleft license are conditioned on making available\n * complete source code of licensed works and modifications under the same\n * license or the GNU GPLv3. Copyright and license notices must be preserved.\n * Contributors provide an express grant of patent rights. However, a larger\n * work using the licensed work through interfaces provided by the licensed\n * work may be distributed under different terms and without source code for\n * the larger work.\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n*/\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\nimport path from \"node:path\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nimport fs from \"node:fs/promises\";\nimport glob from \"glob\";\nimport esbuild, { BuildOptions, Format } from \"esbuild\";\nimport alias from \"esbuild-plugin-alias\";\nimport { Package, InheritClass, logger } from \"qcobjects\";\n\nconst externalPackages = [\n \"node:fs\", \"node:path\", \"node:os\", \"node:util\", \"node:events\", \n \"node:stream\", \"node:http\", \"node:https\", \"node:crypto\", \"node:zlib\", \n \"node:buffer\", \"node:url\", \"node:querystring\", \"node:child_process\", \n \"node:cluster\", \"node:dgram\", \"node:dns\", \"node:net\", \"node:readline\", \n \"node:repl\", \"node:tls\", \"node:tty\", \"node:vm\", \"node:worker_threads\"\n];\n\n// Function to detect and add the extension\nconst nameToExtension = (name: string, ext: string, settings: BuildOptions): string => {\n function isPackage(name: string): boolean {\n return !name.startsWith(\".\") && !name.startsWith(\"/\") && !name.includes(\"/\");\n }\n\n const hasExtension = /\\.[^/\\\\]+$/.test(name);\n const isExternalPackage = name.startsWith(\"qcobjects\") || \n name.startsWith(\"qcobjects-sdk\") ||\n name.startsWith(\"node:\") ||\n name.startsWith(\"fs\") ||\n name.startsWith(\"path\") ||\n name.startsWith(\"os\") ||\n name.startsWith(\"util\") ||\n name.startsWith(\"events\") ||\n name.startsWith(\"stream\") ||\n name.startsWith(\"http\") ||\n name.startsWith(\"https\") ||\n name.startsWith(\"crypto\") ||\n name.startsWith(\"zlib\") ||\n name.startsWith(\"buffer\") ||\n name.startsWith(\"url\") ||\n name.startsWith(\"querystring\") ||\n name.startsWith(\"child_process\") ||\n name.startsWith(\"cluster\") ||\n name.startsWith(\"dgram\") ||\n name.startsWith(\"dns\") ||\n name.startsWith(\"net\") ||\n name.startsWith(\"readline\") ||\n name.startsWith(\"repl\") ||\n name.startsWith(\"tls\") ||\n name.startsWith(\"tty\") ||\n name.startsWith(\"vm\") ||\n name.startsWith(\"worker_threads\")\n || externalPackages.includes(name);\n \n if (!hasExtension && !isPackage(name) && !isExternalPackage) {\n name += ext;\n }\n\n return name;\n};\n\n// Function to add .cjs and .mjs extensions to import/export/require statements\nconst addExtensions = (filePath: string, toExt: string, settings: BuildOptions): void => {\n const content = readFileSync(filePath, \"utf8\");\n const updatedContent = content\n .replace(/(from\\s+['\"])(.*?)(['\"])/g, (match, p1, p2, p3) => {\n return `${p1}${nameToExtension(p2, toExt, settings)}${p3}`;\n })\n .replace(/(import\\s+['\"])(.*?)(['\"])/g, (match, p1, p2, p3) => {\n return `${p1}${nameToExtension(p2, toExt, settings)}${p3}`;\n })\n .replace(/(export\\s+['\"])(.*?)(['\"])/g, (match, p1, p2, p3) => {\n return `${p1}${nameToExtension(p2, toExt, settings)}${p3}`;\n })\n .replace(/(require\\s*\\(\\s*['\"])(.*?)(['\"]\\s*\\))/g, (match, p1, p2, p3) => {\n return `${p1}${nameToExtension(p2, toExt, settings)}${p3}`;\n });\n writeFileSync(filePath, updatedContent, \"utf8\");\n};\n\nconst copyDir = async (source: string, dest: string, exclude: string[]): Promise<void> => {\n source = path.resolve(source);\n dest = path.resolve(dest);\n const dname = path.basename(source);\n const dirExcluded = exclude.includes(dname);\n\n const isDir = async (d: string): Promise<boolean> => {\n try {\n const stat = await fs.stat(d);\n return stat.isDirectory();\n } catch {\n return false;\n }\n };\n\n const isFile = async (d: string): Promise<boolean> => {\n try {\n const stat = await fs.stat(d);\n return stat.isFile();\n } catch {\n return false;\n }\n };\n\n if (await isDir(source) && !dirExcluded) {\n await fs.mkdir(dest, { recursive: true });\n const paths = await fs.readdir(source, { withFileTypes: true });\n const dirs = paths.filter(d => d.isDirectory());\n const files = paths.filter(f => f.isFile());\n\n for (const f of files) {\n const sourceFile = path.resolve(source, f.name);\n const destFile = path.resolve(dest, f.name);\n const fileExcluded = exclude.includes(f.name);\n if (await isFile(sourceFile) && !fileExcluded) {\n logger.debug(`[build:esbuild] Copying files from ${sourceFile} to ${destFile} excluding ${exclude}...`);\n await fs.copyFile(sourceFile, destFile);\n logger.debug(`[build:esbuild] Copying files from ${sourceFile} to ${destFile} excluding ${exclude}...DONE!`);\n }\n }\n\n for (const d of dirs) {\n const sourceDir = path.resolve(source, d.name);\n const destDir = path.resolve(dest, d.name);\n await copyDir(sourceDir, destDir, exclude);\n }\n }\n};\n\nconst ignorePlugin = {\n name: \"transform-qcobjects-imports\",\n setup(build: any) {\n build.onResolve({ filter: /^(qcobjects|qcobjects-sdk)$/ }, (args: any) => {\n if (args.kind === \"dynamic-import\") {\n return { \n path: args.path,\n namespace: \"qcobjects-transform\"\n };\n }\n return {\n external: true,\n path: args.path\n };\n });\n\n build.onResolve({ filter: /.*/, namespace: \"file\" }, (args: any) => {\n if (args.kind === \"dynamic-import\") {\n return {\n external: true,\n path: args.path\n };\n }\n return null;\n });\n\n build.onLoad({ filter: /.*/, namespace: \"qcobjects-transform\" }, (args: any) => {\n return {\n contents: `\n module.exports = __toESM(require(\"${args.path}\"), true);\n `,\n loader: \"js\"\n };\n });\n }\n};\n\nexport class CommandHandler extends InheritClass {\n choiceOption: {\n [x: string]: any;\n build_esbuild: () => Promise<void>;\n };\n\n constructor({\n switchCommander\n }: { switchCommander: any }) {\n super({ switchCommander });\n this.choiceOption = {\n async build_esbuild() {\n try {\n logger.info(\"[build:esbuild] Starting esbuild process...\");\n\n // Get all TypeScript entry points\n const entryPoints = glob.sync(\"src/**/*.ts\");\n\n // Copy templates\n await copyDir(\"./src/templates\", \"./build/templates\", []);\n await copyDir(\"./src/templates\", \"./public/cjs/templates\", []);\n await copyDir(\"./src/templates\", \"./public/esm/templates\", []);\n await copyDir(\"./src/templates\", \"./public/browser/templates\", []);\n\n const baseSettings: BuildOptions = {\n entryPoints,\n bundle: false,\n outdir: \"public/cjs\",\n format: \"cjs\" as Format, \n target: [\"node22\"],\n tsconfig: \"tsconfig.json\",\n globalName: \"global\",\n minify: false,\n keepNames: true,\n sourcemap: true,\n splitting: false,\n chunkNames: \"chunks/[name]-[hash]\",\n plugins: [\n ignorePlugin,\n alias({\n \"types\": path.join(process.cwd(), \"src/types/global/index.d.ts\")\n })\n ]\n };\n\n const cjsSettings: BuildOptions = {\n ...baseSettings,\n outdir: \"public/cjs\",\n format: \"cjs\" as Format,\n platform: \"node\",\n outExtension: {\n \".js\": \".cjs\"\n },\n plugins: [\n ignorePlugin,\n {\n name: \"transform-dynamic-imports\",\n setup(build: any) {\n build.onEnd(() => {\n const files = glob.sync(\"public/cjs/**/*.cjs\");\n for (const file of files) {\n let content = readFileSync(file, \"utf8\");\n content = content.replace(\n /await\\s+import\\(['\"]([^'\"]+)['\"]\\)/g,\n \"__toESM(require(\\\"$1\\\"), true)\"\n );\n writeFileSync(file, content, \"utf8\");\n }\n });\n }\n },\n {\n name: \"add-extensions\",\n setup(build: any) {\n build.onEnd(() => {\n entryPoints.forEach((entry: string) => {\n const outputFilePath = path.join(\"./public/cjs\", entry.replace(\"src/\", \"\").replace(\".ts\", \".cjs\"));\n addExtensions(outputFilePath, \".cjs\", cjsSettings);\n });\n });\n }\n }\n ]\n };\n\n const esmSettings: BuildOptions = {\n ...baseSettings,\n outdir: \"public/esm\",\n format: \"esm\" as Format,\n platform: \"browser\",\n outExtension: {\n \".js\": \".mjs\"\n },\n plugins: [\n {\n name: \"transform-requires\",\n setup(build: any) {\n build.onEnd(() => {\n const files = glob.sync(\"public/esm/**/*.mjs\");\n for (const file of files) {\n let content = readFileSync(file, \"utf8\");\n // Transform require statements to dynamic imports\n content = content.replace(\n /const\\s+{([^}]+)}\\s*=\\s*require\\(['\"]([^'\"]+)['\"]\\)/g,\n \"import { $1 } from \\\"$2\\\"\"\n );\n content = content.replace(\n /const\\s+([^=]+)\\s*=\\s*require\\(['\"]([^'\"]+)['\"]\\)/g,\n \"import $1 from \\\"$2\\\"\"\n );\n writeFileSync(file, content, \"utf8\");\n }\n });\n }\n },\n {\n name: \"add-extensions\",\n setup(build: any) {\n build.onEnd(() => {\n entryPoints.forEach((entry: string) => {\n const outputFilePath = path.join(\"./public/esm\", entry.replace(\"src/\", \"\").replace(\".ts\", \".mjs\"));\n addExtensions(outputFilePath, \".mjs\", esmSettings);\n });\n });\n }\n }\n ]\n };\n\n const browserSettings: BuildOptions = {\n ...baseSettings,\n outdir: \"public/browser\",\n format: \"iife\" as Format,\n platform: \"browser\",\n outExtension: {\n \".js\": \".js\"\n }\n };\n\n // Build all formats\n await Promise.all([\n esbuild.build(cjsSettings),\n esbuild.build(esmSettings),\n esbuild.build(browserSettings)\n ]);\n\n logger.info(\"[build:esbuild] Build process completed successfully!\");\n } catch (e: any) {\n logger.error(`[build:esbuild] Build process failed: ${e.message}`);\n process.exit(1);\n }\n }\n };\n\n const commandHandler = this;\n logger.debug(\"Loading command build:esbuild...\");\n\n // Register both commands\n switchCommander.program.command(\"build:esbuild\")\n .allowExcessArguments(false)\n .description(\"Builds the project using esbuild for CJS, ESM, and browser formats\")\n .action(function () {\n commandHandler.choiceOption.build_esbuild.call(commandHandler);\n });\n\n // Add alias\n switchCommander.program.command(\"build:esb\")\n .allowExcessArguments(false)\n .description(\"Alias for build:esbuild - Builds the project using esbuild\")\n .action(function () {\n commandHandler.choiceOption.build_esbuild.call(commandHandler);\n });\n\n logger.debug(\"Loading command build:esbuild... DONE.\");\n }\n}\n\nPackage(\"com.qcobjects.cli.commands.build.esbuild\", [\n CommandHandler\n]);"], "mappings": "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", "names": ["name"] }