UNPKG

fantasticon

Version:
90 lines 4.47 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const case_1 = require("case"); const generateEnumKeys = (assetKeys) => assetKeys .map(name => { const enumName = (0, case_1.pascal)(name); const prefix = enumName.match(/^\d/) ? 'i' : ''; return { [name]: `${prefix}${enumName}` }; }) .reduce((prev, curr) => Object.assign(prev, curr), {}); const generateEnums = (enumName, enumKeys, quote = '"') => [ `export enum ${enumName} {`, ...Object.entries(enumKeys).map(([enumValue, enumKey]) => ` ${enumKey} = ${quote}${enumValue}${quote},`), '}\n' ].join('\n'); const generateConstant = ({ constantName, enumName, literalIdName, literalKeyName, enumKeys, codepoints, quote = '"', kind = {} }) => { let varType = ': Record<string, string>'; if (kind.enum) { varType = `: { [key in ${enumName}]: string }`; } else if (kind.literalId) { varType = `: { [key in ${literalIdName}]: string }`; } else if (kind.literalKey) { varType = `: { [key in ${literalKeyName}]: string }`; } return [ `export const ${constantName}${varType} = {`, Object.entries(enumKeys) .map(([enumValue, enumKey]) => { const key = kind.enum ? `[${enumName}.${enumKey}]` : `${quote}${enumValue}${quote}`; return ` ${key}: ${quote}${codepoints[enumValue]}${quote},`; }) .join('\n'), '};\n' ].join('\n'); }; const generateStringLiterals = (typeName, literals, quote = '"') => [ `export type ${typeName} =`, `${literals.map(key => ` | ${quote}${key}${quote}`).join('\n')};\n` ].join('\n'); const generator = { generate: (_a) => __awaiter(void 0, [_a], void 0, function* ({ name, codepoints, assets, formatOptions: { ts } = {} }) { var _b; const quote = Boolean(ts === null || ts === void 0 ? void 0 : ts.singleQuotes) ? "'" : '"'; const generateKind = (Boolean((_b = ts === null || ts === void 0 ? void 0 : ts.types) === null || _b === void 0 ? void 0 : _b.length) ? ts.types : ['enum', 'constant', 'literalId', 'literalKey']) .map(kind => ({ [kind]: true })) .reduce((prev, curr) => Object.assign(prev, curr), {}); const enumName = (ts === null || ts === void 0 ? void 0 : ts.enumName) || (0, case_1.pascal)(name); const constantName = (ts === null || ts === void 0 ? void 0 : ts.constantName) || `${(0, case_1.constant)(name)}_CODEPOINTS`; const literalIdName = (ts === null || ts === void 0 ? void 0 : ts.literalIdName) || `${(0, case_1.pascal)(name)}Id`; const literalKeyName = (ts === null || ts === void 0 ? void 0 : ts.literalKeyName) || `${(0, case_1.pascal)(name)}Key`; const names = { enumName, constantName, literalIdName, literalKeyName }; const enumKeys = generateEnumKeys(Object.keys(assets)); const stringLiteralId = generateKind.literalId ? generateStringLiterals(literalIdName, Object.keys(enumKeys), quote) : null; const stringLiteralKey = generateKind.literalKey ? generateStringLiterals(literalKeyName, Object.values(enumKeys), quote) : null; const enums = generateKind.enum ? generateEnums(enumName, enumKeys, quote) : null; const constant = generateKind.constant ? generateConstant(Object.assign(Object.assign({}, names), { enumKeys, codepoints, quote, kind: generateKind })) : null; return [stringLiteralId, stringLiteralKey, enums, constant] .filter(Boolean) .join('\n'); }) }; exports.default = generator; //# sourceMappingURL=ts.js.map