UNPKG

4.33 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.generateGenericExportInterface = exports.generateNamedExports = exports.filenameToTypingsFilename = exports.filterReservedWordClasses = exports.filterNonWordClasses = undefined;
7
8var _path = require('path');
9
10var _path2 = _interopRequireDefault(_path);
11
12function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
14function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
15
16var filenameToInterfaceName = function filenameToInterfaceName(filename) {
17 return _path2.default.basename(filename).replace(/^(\w)/, function (_, c) {
18 return 'I' + c.toUpperCase();
19 }).replace(/\W+(\w)/g, function (_, c) {
20 return c.toUpperCase();
21 });
22};
23
24var cssModuleToTypescriptInterfaceProperties = function cssModuleToTypescriptInterfaceProperties(cssModuleKeys, orderAlphabetically) {
25 var indent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ' ';
26
27 return sortCssModuleKeys(cssModuleKeys, orderAlphabetically).map(function (key) {
28 return indent + '\'' + key + '\': string;';
29 }).join('\n');
30};
31
32var cssModuleToNamedExports = function cssModuleToNamedExports(cssModuleKeys, orderAlphabetically) {
33 return sortCssModuleKeys(cssModuleKeys, orderAlphabetically).map(function (key) {
34 return 'export const ' + key + ': string;';
35 }).join('\n');
36};
37
38var sortCssModuleKeys = function sortCssModuleKeys(cssModuleKeys, orderAlphabetically) {
39 return orderAlphabetically ? [].concat(_toConsumableArray(cssModuleKeys)).sort() : [].concat(_toConsumableArray(cssModuleKeys));
40};
41
42var allWordsRegexp = /^\w+$/i;
43var filterNonWordClasses = exports.filterNonWordClasses = function filterNonWordClasses(cssModuleKeys) {
44 var filteredClassNames = cssModuleKeys.filter(function (classname) {
45 return allWordsRegexp.test(classname);
46 });
47 if (filteredClassNames.length === cssModuleKeys.length) {
48 return [filteredClassNames, []];
49 }
50 var nonWordClassNames = cssModuleKeys.filter(function (classname) {
51 return !allWordsRegexp.test(classname);
52 });
53 return [filteredClassNames, nonWordClassNames];
54};
55
56// Documented here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Reserved_keywords_as_of_ECMAScript_2015
57var reservedWords = ['break', 'case', 'catch', 'class', 'const', 'continue', 'debugger', 'default', 'delete', 'do', 'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', 'while', 'with', 'yield'];
58var filterReservedWordClasses = exports.filterReservedWordClasses = function filterReservedWordClasses(cssModuleKeys) {
59 var filteredClassNames = cssModuleKeys.filter(function (classname) {
60 return reservedWords.indexOf(classname) === -1;
61 });
62 if (filteredClassNames.length === cssModuleKeys.length) {
63 return [filteredClassNames, []];
64 }
65 var reservedWordClassNames = cssModuleKeys.filter(function (classname) {
66 return reservedWords.indexOf(classname) !== -1;
67 });
68 return [filteredClassNames, reservedWordClassNames];
69};
70
71var filenameToTypingsFilename = exports.filenameToTypingsFilename = function filenameToTypingsFilename(filename) {
72 var dirName = _path2.default.dirname(filename);
73 var baseName = _path2.default.basename(filename);
74 return _path2.default.join(dirName, baseName + '.d.ts');
75};
76
77var generateNamedExports = exports.generateNamedExports = function generateNamedExports(cssModuleKeys, orderAlphabetically) {
78 var namedExports = cssModuleToNamedExports(cssModuleKeys, orderAlphabetically);
79 return namedExports + '\n';
80};
81
82var generateGenericExportInterface = exports.generateGenericExportInterface = function generateGenericExportInterface(cssModuleKeys, filename, orderAlphabetically, indent) {
83 var interfaceName = filenameToInterfaceName(filename);
84 var interfaceProperties = cssModuleToTypescriptInterfaceProperties(cssModuleKeys, orderAlphabetically, indent);
85 return 'export interface ' + interfaceName + ' {\n' + interfaceProperties + '\n}\n\nexport const locals: ' + interfaceName + ';\nexport default locals;\n';
86};
\No newline at end of file