UNPKG

@solfacil/girassol

Version:
208 lines 18.8 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); var promises_1 = require("fs/promises"); var RELATIVE_ROOT_PROJECT = './'; function nuxtConfigSettingUp(spin) { return __awaiter(this, void 0, void 0, function () { var GENERATE_ICONS_IMPORT, file, spinnerNuxt, updated, nuxtConfig, NUXT_UNPLUGIN_DEPRECATED, NUXT_UNPLUGIN_LAST_UPDATE, NUXT, unpluginSettings, fileWithImport, viteIndex, viteConfig, vitePlugins, pluginWithGenerateIconsData, nuxtConfigUpdated; return __generator(this, function (_a) { switch (_a.label) { case 0: GENERATE_ICONS_IMPORT = "import GenerateIconsData from '@solfacil/girassol/vite-modules/generate-girassol-icons'"; return [4 /*yield*/, (0, promises_1.readFile)("".concat(RELATIVE_ROOT_PROJECT, "nuxt.config.ts"), { encoding: 'utf8' })]; case 1: file = _a.sent(); if (!!file.includes(GENERATE_ICONS_IMPORT)) return [3 /*break*/, 3]; spinnerNuxt = spin('Setting plugin'); updated = ''; nuxtConfig = "".concat(GENERATE_ICONS_IMPORT, ";\n").concat(file); NUXT_UNPLUGIN_DEPRECATED = "'unplugin-icons/nuxt',\n"; NUXT_UNPLUGIN_LAST_UPDATE = "['unplugin-icons/nuxt', { scale: 1.0 }],\n"; NUXT = "[\n 'unplugin-icons/nuxt',\n {\n scale: 1.0,\n customCollections: {\n girassol: async () =>\n JSON.parse(await readFile(`node_modules/@solfacil/girassol/icons.json`, 'utf8')),\n illustration: async () =>\n JSON.parse(await readFile(`node_modules/@solfacil/girassol/illustration.json`, 'utf8'))\n }\n }\n ],\n"; unpluginSettings = null; unpluginSettings = nuxtConfig.includes(NUXT_UNPLUGIN_LAST_UPDATE) ? NUXT_UNPLUGIN_LAST_UPDATE : nuxtConfig.includes(NUXT_UNPLUGIN_DEPRECATED) ? NUXT_UNPLUGIN_DEPRECATED : null; if (unpluginSettings && !nuxtConfig.includes('girassol: async () =>')) { fileWithImport = nuxtConfig.includes("import { readFile } from 'fs/promises'") ? file : "import { readFile } from 'fs/promises';\n".concat(nuxtConfig); updated = fileWithImport.replace(unpluginSettings, NUXT); } viteIndex = updated.indexOf('vite'); viteConfig = updated.substring(viteIndex, Infinity); vitePlugins = viteConfig.match(/(plugins:.*\,)/)[0]; pluginWithGenerateIconsData = vitePlugins.replace(']', ', GenerateIconsData()]'); nuxtConfigUpdated = updated.replace(vitePlugins, pluginWithGenerateIconsData); return [4 /*yield*/, (0, promises_1.writeFile)("".concat(RELATIVE_ROOT_PROJECT, "nuxt.config.ts"), nuxtConfigUpdated)]; case 2: _a.sent(); spinnerNuxt.succeed("Girassol icons configured in the [nuxt.config.ts]!"); _a.label = 3; case 3: return [2 /*return*/]; } }); }); } function viteConfigSettingUp(spin) { return __awaiter(this, void 0, void 0, function () { var file, GENERATE_ICONS_IMPORT, spinner, updated, ICONS, Matcher, lastImport; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (0, promises_1.readFile)("".concat(RELATIVE_ROOT_PROJECT, "vite.config.ts"), { encoding: 'utf8' })]; case 1: file = _a.sent(); GENERATE_ICONS_IMPORT = "import GenerateIconsData from './node_modules/@solfacil/girassol/vite-modules/generate-girassol-icons'"; if (!!file.includes('import GenerateIconsData from')) return [3 /*break*/, 3]; spinner = spin('Setting vite.config.ts'); updated = ''; ICONS = "Icons({\n compiler: 'vue3',\n scale: 1.0,\n customCollections: {\n girassol: async () =>\n JSON.parse(await readFile(`node_modules/@solfacil/girassol/icons.json`, 'utf8')),\n illustration: async () =>\n JSON.parse(await readFile(`node_modules/@solfacil/girassol/illustration.json`, 'utf8')),\n },\n }),"; Matcher = file.match(/Icons\(\{\n[\w\s\:\n\.\'\"\}\,]*\}\)\,/m)[0]; lastImport = file.match(/import[\w\s\-\@\_\{\}\.]+\'[\w\s\-\@\_\{\}\.\/]*\'/g).at(-1); updated = file.replace(lastImport, "".concat(lastImport, "\n").concat(GENERATE_ICONS_IMPORT, "\nimport { readFile } from 'fs/promises'\n")); updated = updated.replace(Matcher, ICONS); updated = updated.replace('plugins: [', 'plugins: [\n\t\tGenerateIconsData(),\n'); return [4 /*yield*/, (0, promises_1.writeFile)("".concat(RELATIVE_ROOT_PROJECT, "vite.config.ts"), updated)]; case 2: _a.sent(); spinner.succeed("Girassol icons configured in the [vite.config.ts]!"); _a.label = 3; case 3: return [2 /*return*/]; } }); }); } function vscodeSettingUp(spin) { return __awaiter(this, void 0, void 0, function () { var vscode, file, regex, regexComments, pre, parsed; return __generator(this, function (_a) { switch (_a.label) { case 0: vscode = spin('Setting .vscode'); return [4 /*yield*/, (0, promises_1.readFile)("".concat(RELATIVE_ROOT_PROJECT, ".vscode/settings.json"), { encoding: 'utf8' })]; case 1: file = _a.sent(); regex = /\,(?!\s*?[\{\[\"\'\w])/g; regexComments = /\/\*[\s\S]*?\*\/|([^:]|^)\/\/.*$/gm; pre = file.replace(regex, '').replace(regexComments, ''); parsed = JSON.parse(pre); Reflect.deleteProperty(parsed, 'iconify.includes'); if (!!Reflect.has(parsed, 'iconify.customCollectionJsonPaths')) return [3 /*break*/, 3]; Reflect.set(parsed, 'iconify.customCollectionJsonPaths', [ './node_modules/@solfacil/girassol/icons.json', './node_modules/@solfacil/girassol/illustration.json', ]); return [4 /*yield*/, (0, promises_1.writeFile)("".concat(RELATIVE_ROOT_PROJECT, ".vscode/settings.json"), JSON.stringify(parsed, null, 2))]; case 2: _a.sent(); _a.label = 3; case 3: vscode.succeed('Girassol icons configured in the [.vscode/settings.json]'); return [2 /*return*/]; } }); }); } function packagePostInstallSettingUp(spin) { return __awaiter(this, void 0, void 0, function () { var spinner, file, parsed, scripts; return __generator(this, function (_a) { switch (_a.label) { case 0: spinner = spin('Setting plugin'); return [4 /*yield*/, (0, promises_1.readFile)("".concat(RELATIVE_ROOT_PROJECT, "package.json"), { encoding: 'utf8' })]; case 1: file = _a.sent(); parsed = JSON.parse(file); scripts = parsed.scripts; if (!!Reflect.has(scripts, 'postinstall')) return [3 /*break*/, 3]; Reflect.set(scripts, 'postinstall', 'node node_modules/@solfacil/girassol/scripts/update-girassol-icons.mjs'); return [4 /*yield*/, (0, promises_1.writeFile)("".concat(RELATIVE_ROOT_PROJECT, "package.json"), JSON.stringify(parsed, null, 2))]; case 2: _a.sent(); _a.label = 3; case 3: spinner.succeed("Girassol icons configured in the [package.json]!"); return [2 /*return*/]; } }); }); } exports.default = { name: 'generate:icons', description: 'Setting up girassol icons', run: function (toolbox) { var _a; return __awaiter(this, void 0, void 0, function () { var parameters, _b, highlight, spin, framework; return __generator(this, function (_c) { switch (_c.label) { case 0: parameters = toolbox.parameters, _b = toolbox.print, highlight = _b.highlight, spin = _b.spin; framework = ((_a = parameters.options) === null || _a === void 0 ? void 0 : _a.nuxt) ? 'Nuxt' : 'Vue'; if (!(framework === 'Nuxt')) return [3 /*break*/, 2]; return [4 /*yield*/, nuxtConfigSettingUp(spin)]; case 1: _c.sent(); return [3 /*break*/, 4]; case 2: return [4 /*yield*/, viteConfigSettingUp(spin)]; case 3: _c.sent(); _c.label = 4; case 4: return [4 /*yield*/, vscodeSettingUp(spin)]; case 5: _c.sent(); return [4 /*yield*/, packagePostInstallSettingUp(spin)]; case 6: _c.sent(); if (framework === 'Nuxt') { highlight("\n\u251C package.json\n\u251C nuxt.config.ts\n\u251C .vscode/\n\u2514\u2500\u2500 settings.json\n "); } else { highlight("\n\u251C package.json\n\u251C vite.config.ts\n\u251C .vscode\n\u2514\u2500\u2500 settings.json\n "); } return [2 /*return*/]; } }); }); }, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtaWNvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvZ2VuZXJhdGUtaWNvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSx3Q0FBaUQ7QUFFakQsSUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUE7QUFFbEMsU0FBZSxtQkFBbUIsQ0FBQyxJQUFJOzs7Ozs7b0JBQy9CLHFCQUFxQixHQUMzQix5RkFBeUYsQ0FBQTtvQkFFNUUscUJBQU0sSUFBQSxtQkFBUSxFQUFDLFVBQUcscUJBQXFCLG1CQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUE7O29CQUFyRixJQUFJLEdBQUcsU0FBOEU7eUJBRXZGLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFyQyx3QkFBcUM7b0JBQ2pDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtvQkFDdEMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtvQkFFVixVQUFVLEdBQUcsVUFBRyxxQkFBcUIsZ0JBQU0sSUFBSSxDQUFFLENBQUE7b0JBRWpELHdCQUF3QixHQUFHLDBCQUEwQixDQUFBO29CQUNyRCx5QkFBeUIsR0FBRyw0Q0FBNEMsQ0FBQTtvQkFDeEUsSUFBSSxHQUFHLDJaQVdOLENBQUE7b0JBRUgsZ0JBQWdCLEdBQUcsSUFBSSxDQUFBO29CQUUzQixnQkFBZ0IsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDO3dCQUMvRCxDQUFDLENBQUMseUJBQXlCO3dCQUMzQixDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQzs0QkFDN0MsQ0FBQyxDQUFDLHdCQUF3Qjs0QkFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQTtvQkFFVixJQUFJLGdCQUFnQixJQUFJLENBQUMsVUFBVSxDQUFDLFFB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