@solfacil/girassol
Version:
Girassol design system
208 lines • 18.8 kB
JavaScript
;
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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