1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.generateGenericExportInterface = exports.generateNamedExports = exports.filenameToTypingsFilename = exports.filterReservedWordClasses = exports.filterNonWordClasses = undefined;
|
7 |
|
8 | var _path = require('path');
|
9 |
|
10 | var _path2 = _interopRequireDefault(_path);
|
11 |
|
12 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
13 |
|
14 | function _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 |
|
16 | var 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 |
|
24 | var 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 |
|
32 | var cssModuleToNamedExports = function cssModuleToNamedExports(cssModuleKeys, orderAlphabetically) {
|
33 | return sortCssModuleKeys(cssModuleKeys, orderAlphabetically).map(function (key) {
|
34 | return 'export const ' + key + ': string;';
|
35 | }).join('\n');
|
36 | };
|
37 |
|
38 | var sortCssModuleKeys = function sortCssModuleKeys(cssModuleKeys, orderAlphabetically) {
|
39 | return orderAlphabetically ? [].concat(_toConsumableArray(cssModuleKeys)).sort() : [].concat(_toConsumableArray(cssModuleKeys));
|
40 | };
|
41 |
|
42 | var allWordsRegexp = /^\w+$/i;
|
43 | var 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 |
|
57 | var 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'];
|
58 | var 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 |
|
71 | var 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 |
|
77 | var generateNamedExports = exports.generateNamedExports = function generateNamedExports(cssModuleKeys, orderAlphabetically) {
|
78 | var namedExports = cssModuleToNamedExports(cssModuleKeys, orderAlphabetically);
|
79 | return namedExports + '\n';
|
80 | };
|
81 |
|
82 | var 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 |