happy-css-modules 3.1.0 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts +6 -0
- package/dist/cli.js +121 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.test.d.ts +1 -0
- package/dist/cli.test.js +66 -0
- package/dist/cli.test.js.map +1 -0
- package/dist/config.d.ts +1 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -0
- package/dist/emitter/dts.d.ts +14 -0
- package/dist/emitter/dts.js +128 -0
- package/dist/emitter/dts.js.map +1 -0
- package/dist/emitter/dts.test.d.ts +1 -0
- package/dist/emitter/dts.test.js +205 -0
- package/dist/emitter/dts.test.js.map +1 -0
- package/dist/emitter/file-system.d.ts +6 -0
- package/dist/emitter/file-system.js +26 -0
- package/dist/emitter/file-system.js.map +1 -0
- package/dist/emitter/file-system.test.d.ts +1 -0
- package/dist/emitter/file-system.test.js +34 -0
- package/dist/emitter/file-system.test.js.map +1 -0
- package/dist/emitter/index.d.ts +34 -0
- package/dist/emitter/index.js +49 -0
- package/dist/emitter/index.js.map +1 -0
- package/dist/emitter/index.test.d.ts +1 -0
- package/dist/emitter/index.test.js +68 -0
- package/dist/emitter/index.test.js.map +1 -0
- package/dist/emitter/source-map.d.ts +8 -0
- package/dist/emitter/source-map.js +16 -0
- package/dist/emitter/source-map.js.map +1 -0
- package/dist/emitter/source-map.test.d.ts +1 -0
- package/dist/emitter/source-map.test.js +13 -0
- package/dist/emitter/source-map.test.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/integration-test/go-to-definition.test.d.ts +1 -0
- package/dist/integration-test/go-to-definition.test.js +334 -0
- package/dist/integration-test/go-to-definition.test.js.map +1 -0
- package/dist/library/source-map/index.d.ts +8 -0
- package/dist/library/source-map/index.js +5 -0
- package/dist/library/source-map/index.js.map +1 -0
- package/dist/locator/index.d.ts +46 -0
- package/dist/locator/index.js +173 -0
- package/dist/locator/index.js.map +1 -0
- package/dist/locator/index.test.d.ts +1 -0
- package/dist/locator/index.test.js +393 -0
- package/dist/locator/index.test.js.map +1 -0
- package/dist/locator/postcss.d.ts +91 -0
- package/dist/locator/postcss.js +241 -0
- package/dist/locator/postcss.js.map +1 -0
- package/dist/locator/postcss.test.d.ts +1 -0
- package/dist/locator/postcss.test.js +256 -0
- package/dist/locator/postcss.test.js.map +1 -0
- package/dist/logger.d.ts +9 -0
- package/dist/logger.js +28 -0
- package/dist/logger.js.map +1 -0
- package/dist/regression-test/issue-168.test.d.ts +1 -0
- package/dist/regression-test/issue-168.test.js +30 -0
- package/dist/regression-test/issue-168.test.js.map +1 -0
- package/dist/resolver/index.d.ts +22 -0
- package/dist/resolver/index.js +44 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/resolver/index.test.d.ts +1 -0
- package/dist/resolver/index.test.js +16 -0
- package/dist/resolver/index.test.js.map +1 -0
- package/dist/resolver/node-resolver.d.ts +2 -0
- package/dist/resolver/node-resolver.js +6 -0
- package/dist/resolver/node-resolver.js.map +1 -0
- package/dist/resolver/node-resolver.test.d.ts +1 -0
- package/dist/resolver/node-resolver.test.js +25 -0
- package/dist/resolver/node-resolver.test.js.map +1 -0
- package/dist/resolver/relative-resolver.d.ts +2 -0
- package/dist/resolver/relative-resolver.js +5 -0
- package/dist/resolver/relative-resolver.js.map +1 -0
- package/dist/resolver/relative-resolver.test.d.ts +1 -0
- package/dist/resolver/relative-resolver.test.js +12 -0
- package/dist/resolver/relative-resolver.test.js.map +1 -0
- package/dist/resolver/webpack-resolver.d.ts +24 -0
- package/dist/resolver/webpack-resolver.js +91 -0
- package/dist/resolver/webpack-resolver.js.map +1 -0
- package/dist/resolver/webpack-resolver.test.d.ts +1 -0
- package/dist/resolver/webpack-resolver.test.js +89 -0
- package/dist/resolver/webpack-resolver.test.js.map +1 -0
- package/dist/runner.d.ts +76 -0
- package/dist/runner.js +120 -0
- package/dist/runner.js.map +1 -0
- package/dist/runner.test.d.ts +1 -0
- package/dist/runner.test.js +287 -0
- package/dist/runner.test.js.map +1 -0
- package/dist/test-util/jest/resolver.cjs +31 -0
- package/dist/test-util/jest/resolver.cjs.map +1 -0
- package/dist/test-util/jest/resolver.d.cts +16 -0
- package/dist/test-util/tsserver.d.ts +31 -0
- package/dist/test-util/tsserver.js +112 -0
- package/dist/test-util/tsserver.js.map +1 -0
- package/dist/test-util/util.d.ts +29 -0
- package/dist/test-util/util.js +85 -0
- package/dist/test-util/util.js.map +1 -0
- package/dist/transformer/index.d.ts +30 -0
- package/dist/transformer/index.js +25 -0
- package/dist/transformer/index.js.map +1 -0
- package/dist/transformer/index.test.d.ts +1 -0
- package/dist/transformer/index.test.js +66 -0
- package/dist/transformer/index.test.js.map +1 -0
- package/dist/transformer/less-transformer.d.ts +2 -0
- package/dist/transformer/less-transformer.js +45 -0
- package/dist/transformer/less-transformer.js.map +1 -0
- package/dist/transformer/less-transformer.test.d.ts +1 -0
- package/dist/transformer/less-transformer.test.js +134 -0
- package/dist/transformer/less-transformer.test.js.map +1 -0
- package/dist/transformer/postcss-transformer.d.ts +12 -0
- package/dist/transformer/postcss-transformer.js +32 -0
- package/dist/transformer/postcss-transformer.js.map +1 -0
- package/dist/transformer/postcss-transformer.test.d.ts +1 -0
- package/dist/transformer/postcss-transformer.test.js +178 -0
- package/dist/transformer/postcss-transformer.test.js.map +1 -0
- package/dist/transformer/scss-transformer.d.ts +2 -0
- package/dist/transformer/scss-transformer.js +40 -0
- package/dist/transformer/scss-transformer.js.map +1 -0
- package/dist/transformer/scss-transformer.test.d.ts +1 -0
- package/dist/transformer/scss-transformer.test.js +149 -0
- package/dist/transformer/scss-transformer.test.js.map +1 -0
- package/dist/util.d.ts +21 -0
- package/dist/util.js +72 -0
- package/dist/util.js.map +1 -0
- package/dist/util.test.d.ts +1 -0
- package/dist/util.test.js +74 -0
- package/dist/util.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { type Rule, type AtRule, type Root } from 'postcss';
|
|
2
|
+
import { type ClassName } from 'postcss-selector-parser';
|
|
3
|
+
/** The pair of line number and column number. */
|
|
4
|
+
export type Position = {
|
|
5
|
+
/** The line number in the source file. It is 1-based (compatible with postcss). */
|
|
6
|
+
line: number;
|
|
7
|
+
/** The column number in the source file. It is 1-based (compatible with postcss). */
|
|
8
|
+
column: number;
|
|
9
|
+
};
|
|
10
|
+
/** The original location of class selector. If the original location is not found, all fields are `undefined`. */
|
|
11
|
+
export type Location = {
|
|
12
|
+
filePath: string;
|
|
13
|
+
/** The inclusive starting position of the node's source (compatible with postcss). */
|
|
14
|
+
start: Position;
|
|
15
|
+
/** The inclusive ending position of the node's source (compatible with postcss). */
|
|
16
|
+
end: Position;
|
|
17
|
+
} | {
|
|
18
|
+
filePath: undefined;
|
|
19
|
+
start: undefined;
|
|
20
|
+
end: undefined;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Traverses a local token from the AST and returns its name.
|
|
24
|
+
* @param ast The AST to traverse.
|
|
25
|
+
* @returns The name of the local token.
|
|
26
|
+
*/
|
|
27
|
+
export declare function generateLocalTokenNames(ast: Root): Promise<string[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Get the original location of the class selector.
|
|
30
|
+
* @param rule The rule node that contains the token.
|
|
31
|
+
* @param classSelector The class selector node that contains the token.
|
|
32
|
+
* @returns The original location of the class selector.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getOriginalLocationOfClassSelector(rule: Rule, classSelector: ClassName): Location;
|
|
35
|
+
/**
|
|
36
|
+
* Get the original location of `@value`.
|
|
37
|
+
* @param atValue The `@value` rule.
|
|
38
|
+
* @returns The location of the `@value` rule.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getOriginalLocationOfAtValue(atValue: AtRule, valueDeclaration: ValueDeclaration): Location;
|
|
41
|
+
type CollectNodesResult = {
|
|
42
|
+
atImports: AtRule[];
|
|
43
|
+
atValues: AtRule[];
|
|
44
|
+
classSelectors: {
|
|
45
|
+
rule: Rule;
|
|
46
|
+
classSelector: ClassName;
|
|
47
|
+
}[];
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Collect nodes from the AST.
|
|
51
|
+
* @param ast The AST.
|
|
52
|
+
*/
|
|
53
|
+
export declare function collectNodes(ast: Root): CollectNodesResult;
|
|
54
|
+
/**
|
|
55
|
+
* Parse the `@import` rule.
|
|
56
|
+
* @param atImport The `@import` rule to parse.
|
|
57
|
+
* @returns The imported sheet path.
|
|
58
|
+
*/
|
|
59
|
+
export declare function parseAtImport(atImport: AtRule): string | undefined;
|
|
60
|
+
type ValueDeclaration = {
|
|
61
|
+
type: 'valueDeclaration';
|
|
62
|
+
tokenName: string;
|
|
63
|
+
};
|
|
64
|
+
type ValueImportDeclaration = {
|
|
65
|
+
type: 'valueImportDeclaration';
|
|
66
|
+
imports: {
|
|
67
|
+
importedTokenName: string;
|
|
68
|
+
localTokenName: string;
|
|
69
|
+
}[];
|
|
70
|
+
from: string;
|
|
71
|
+
};
|
|
72
|
+
type ParsedAtValue = ValueDeclaration | ValueImportDeclaration;
|
|
73
|
+
/**
|
|
74
|
+
* Parse the `@value` rule.
|
|
75
|
+
* Forked from https://github.com/css-modules/postcss-modules-values/blob/v4.0.0/src/index.js.
|
|
76
|
+
*
|
|
77
|
+
* @license
|
|
78
|
+
* ISC License (ISC)
|
|
79
|
+
* Copyright (c) 2015, Glen Maddern
|
|
80
|
+
*
|
|
81
|
+
* Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted,
|
|
82
|
+
* provided that the above copyright notice and this permission notice appear in all copies.
|
|
83
|
+
*
|
|
84
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING
|
|
85
|
+
* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
86
|
+
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
|
87
|
+
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
|
|
88
|
+
* THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
89
|
+
*/
|
|
90
|
+
export declare function parseAtValue(atValue: AtRule): ParsedAtValue;
|
|
91
|
+
export {};
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import postcss from 'postcss';
|
|
2
|
+
import modules from 'postcss-modules';
|
|
3
|
+
import selectorParser from 'postcss-selector-parser';
|
|
4
|
+
import valueParser from 'postcss-value-parser';
|
|
5
|
+
/**
|
|
6
|
+
* Traverses a local token from the AST and returns its name.
|
|
7
|
+
* @param ast The AST to traverse.
|
|
8
|
+
* @returns The name of the local token.
|
|
9
|
+
*/
|
|
10
|
+
export async function generateLocalTokenNames(ast) {
|
|
11
|
+
class EmptyLoader {
|
|
12
|
+
async fetch(_file, _relativeTo, _depTrace) {
|
|
13
|
+
// Return an empty object because we do not want to load external tokens in `generateLocalTokenNames`.
|
|
14
|
+
return Promise.resolve({});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return new Promise((resolve, reject) => {
|
|
18
|
+
postcss
|
|
19
|
+
.default()
|
|
20
|
+
.use(modules({
|
|
21
|
+
// `@import`, `@value`, and `composes` can read tokens from external files.
|
|
22
|
+
// However, we want to collect only local tokens. So we will fake that
|
|
23
|
+
// an empty token is exported from the external file.
|
|
24
|
+
Loader: EmptyLoader,
|
|
25
|
+
getJSON: (_cssFileName, json) => {
|
|
26
|
+
resolve(Object.keys(json));
|
|
27
|
+
},
|
|
28
|
+
}))
|
|
29
|
+
// NOTE: `process` modifies ast, so clone it.
|
|
30
|
+
.process(ast.clone())
|
|
31
|
+
.catch(reject);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get the original location of the class selector.
|
|
36
|
+
* @param rule The rule node that contains the token.
|
|
37
|
+
* @param classSelector The class selector node that contains the token.
|
|
38
|
+
* @returns The original location of the class selector.
|
|
39
|
+
*/
|
|
40
|
+
export function getOriginalLocationOfClassSelector(rule, classSelector) {
|
|
41
|
+
// The node derived from `postcss.parse` always has `source` property. Therefore, this line is unreachable.
|
|
42
|
+
if (rule.source === undefined || classSelector.source === undefined)
|
|
43
|
+
throw new Error('Node#source is undefined');
|
|
44
|
+
// The node derived from `postcss.parse` always has `start` and `end` property. Therefore, this line is unreachable.
|
|
45
|
+
if (rule.source.start === undefined || classSelector.source.start === undefined)
|
|
46
|
+
throw new Error('Node#start is undefined');
|
|
47
|
+
if (rule.source.end === undefined || classSelector.source.end === undefined)
|
|
48
|
+
throw new Error('Node#end is undefined');
|
|
49
|
+
if (rule.source.input.file === undefined)
|
|
50
|
+
throw new Error('Node#input.file is undefined');
|
|
51
|
+
const classSelectorStartPosition = {
|
|
52
|
+
// The line is 1-based.
|
|
53
|
+
line: rule.source.start.line + (classSelector.source.start.line - 1),
|
|
54
|
+
// The column is 1-based.
|
|
55
|
+
column: rule.source.start.column + (classSelector.source.start.column - 1),
|
|
56
|
+
};
|
|
57
|
+
const classSelectorEndPosition = {
|
|
58
|
+
line: classSelectorStartPosition.line,
|
|
59
|
+
// The column is inclusive.
|
|
60
|
+
column: classSelectorStartPosition.column + classSelector.value.length,
|
|
61
|
+
};
|
|
62
|
+
const classSelectorLocation = {
|
|
63
|
+
filePath: rule.source.input.file,
|
|
64
|
+
start: classSelectorStartPosition,
|
|
65
|
+
end: classSelectorEndPosition,
|
|
66
|
+
};
|
|
67
|
+
if (!rule.source.input.map)
|
|
68
|
+
return classSelectorLocation;
|
|
69
|
+
const classSelectorOrigin = rule.source.input.origin(classSelectorLocation.start.line,
|
|
70
|
+
// The column of `Input#origin` is 0-based. This behavior is undocumented and probably a postcss's bug.
|
|
71
|
+
// TODO: Open PR to postcss/postcss
|
|
72
|
+
classSelectorLocation.start.column - 1);
|
|
73
|
+
if (classSelectorOrigin === false || classSelectorOrigin.file === undefined) {
|
|
74
|
+
return { filePath: undefined, start: undefined, end: undefined };
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
filePath: classSelectorOrigin.file,
|
|
78
|
+
start: {
|
|
79
|
+
line: classSelectorOrigin.line,
|
|
80
|
+
column: classSelectorOrigin.column + 1,
|
|
81
|
+
},
|
|
82
|
+
end: {
|
|
83
|
+
line: classSelectorOrigin.line,
|
|
84
|
+
column: classSelectorOrigin.column + classSelector.value.length + 1,
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get the original location of `@value`.
|
|
90
|
+
* @param atValue The `@value` rule.
|
|
91
|
+
* @returns The location of the `@value` rule.
|
|
92
|
+
*/
|
|
93
|
+
export function getOriginalLocationOfAtValue(atValue, valueDeclaration) {
|
|
94
|
+
// The node derived from `postcss.parse` always has `source` property. Therefore, this line is unreachable.
|
|
95
|
+
if (atValue.source === undefined)
|
|
96
|
+
throw new Error('Node#source is undefined');
|
|
97
|
+
// The node derived from `postcss.parse` always has `start` and `end` property. Therefore, this line is unreachable.
|
|
98
|
+
if (atValue.source.start === undefined)
|
|
99
|
+
throw new Error('Node#start is undefined');
|
|
100
|
+
if (atValue.source.end === undefined)
|
|
101
|
+
throw new Error('Node#end is undefined');
|
|
102
|
+
if (atValue.source.input.file === undefined)
|
|
103
|
+
throw new Error('Node#input.file is undefined');
|
|
104
|
+
return {
|
|
105
|
+
filePath: atValue.source.input.file,
|
|
106
|
+
start: {
|
|
107
|
+
line: atValue.source.start.line,
|
|
108
|
+
column: atValue.source.start.column + 7, // Add for `@value `
|
|
109
|
+
},
|
|
110
|
+
end: {
|
|
111
|
+
line: atValue.source.start.line,
|
|
112
|
+
column: atValue.source.start.column + 7 + valueDeclaration.tokenName.length, // Add for `@value ` and token name
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function isAtRuleNode(node) {
|
|
117
|
+
return node.type === 'atrule';
|
|
118
|
+
}
|
|
119
|
+
function isAtImportNode(node) {
|
|
120
|
+
return isAtRuleNode(node) && node.name === 'import';
|
|
121
|
+
}
|
|
122
|
+
function isAtValueNode(node) {
|
|
123
|
+
return isAtRuleNode(node) && node.name === 'value';
|
|
124
|
+
}
|
|
125
|
+
function isRuleNode(node) {
|
|
126
|
+
return node.type === 'rule';
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Collect nodes from the AST.
|
|
130
|
+
* @param ast The AST.
|
|
131
|
+
*/
|
|
132
|
+
export function collectNodes(ast) {
|
|
133
|
+
const atImports = [];
|
|
134
|
+
const atValues = [];
|
|
135
|
+
const classSelectors = [];
|
|
136
|
+
ast.walk((node) => {
|
|
137
|
+
if (isAtImportNode(node)) {
|
|
138
|
+
atImports.push(node);
|
|
139
|
+
}
|
|
140
|
+
else if (isAtValueNode(node)) {
|
|
141
|
+
atValues.push(node);
|
|
142
|
+
}
|
|
143
|
+
else if (isRuleNode(node)) {
|
|
144
|
+
// In `rule.selector` comes the following string:
|
|
145
|
+
// 1. ".foo"
|
|
146
|
+
// 2. ".foo:hover"
|
|
147
|
+
// 3. ".foo, .bar"
|
|
148
|
+
selectorParser((selectors) => {
|
|
149
|
+
selectors.walk((selector) => {
|
|
150
|
+
if (selector.type === 'class') {
|
|
151
|
+
// In `selector.value` comes the following string:
|
|
152
|
+
// 1. "foo"
|
|
153
|
+
// 2. "bar"
|
|
154
|
+
classSelectors.push({ rule: node, classSelector: selector });
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}).processSync(node);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
return { atImports, atValues, classSelectors };
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Parse the `@import` rule.
|
|
164
|
+
* @param atImport The `@import` rule to parse.
|
|
165
|
+
* @returns The imported sheet path.
|
|
166
|
+
*/
|
|
167
|
+
export function parseAtImport(atImport) {
|
|
168
|
+
const firstNode = valueParser(atImport.params).nodes[0];
|
|
169
|
+
if (firstNode === undefined)
|
|
170
|
+
return undefined;
|
|
171
|
+
if (firstNode.type === 'string')
|
|
172
|
+
return firstNode.value;
|
|
173
|
+
if (firstNode.type === 'function' && firstNode.value === 'url') {
|
|
174
|
+
if (firstNode.nodes[0] === undefined)
|
|
175
|
+
return undefined;
|
|
176
|
+
if (firstNode.nodes[0].type === 'string')
|
|
177
|
+
return firstNode.nodes[0].value;
|
|
178
|
+
if (firstNode.nodes[0].type === 'word')
|
|
179
|
+
return firstNode.nodes[0].value;
|
|
180
|
+
}
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
const matchImports = /^(.+?|\([\s\S]+?\))\s+from\s+("[^"]*"|'[^']*'|[\w-]+)$/u;
|
|
184
|
+
const matchValueDefinition = /(?:\s+|^)([\w-]+):?(.*?)$/u;
|
|
185
|
+
const matchImport = /^([\w-]+)(?:\s+as\s+([\w-]+))?/u;
|
|
186
|
+
/**
|
|
187
|
+
* Parse the `@value` rule.
|
|
188
|
+
* Forked from https://github.com/css-modules/postcss-modules-values/blob/v4.0.0/src/index.js.
|
|
189
|
+
*
|
|
190
|
+
* @license
|
|
191
|
+
* ISC License (ISC)
|
|
192
|
+
* Copyright (c) 2015, Glen Maddern
|
|
193
|
+
*
|
|
194
|
+
* Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted,
|
|
195
|
+
* provided that the above copyright notice and this permission notice appear in all copies.
|
|
196
|
+
*
|
|
197
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING
|
|
198
|
+
* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
199
|
+
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
|
200
|
+
* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
|
|
201
|
+
* THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
202
|
+
*/
|
|
203
|
+
export function parseAtValue(atValue) {
|
|
204
|
+
const matchesForImports = atValue.params.match(matchImports);
|
|
205
|
+
if (matchesForImports) {
|
|
206
|
+
const [, aliases, path] = matchesForImports;
|
|
207
|
+
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
208
|
+
if (aliases === undefined || path === undefined)
|
|
209
|
+
throw new Error(`unreachable`);
|
|
210
|
+
const imports = aliases
|
|
211
|
+
.replace(/^\(\s*([\s\S]+)\s*\)$/u, '$1')
|
|
212
|
+
.split(/\s*,\s*/u)
|
|
213
|
+
.map((alias) => {
|
|
214
|
+
const tokens = matchImport.exec(alias);
|
|
215
|
+
if (tokens) {
|
|
216
|
+
const [, theirName, myName] = tokens;
|
|
217
|
+
if (theirName === undefined)
|
|
218
|
+
throw new Error(`unreachable`);
|
|
219
|
+
return { importedTokenName: theirName, localTokenName: myName ?? theirName };
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
throw new Error(`@import statement "${alias}" is invalid!`);
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
// Remove quotes from the path.
|
|
226
|
+
// NOTE: This is a restriction unique to "happy-css-modules" and not a specification of CSS Modules.
|
|
227
|
+
const normalizedPath = path.replace(/^['"]|['"]$/gu, '');
|
|
228
|
+
return { type: 'valueImportDeclaration', imports, from: normalizedPath };
|
|
229
|
+
}
|
|
230
|
+
const matchesForValueDefinitions = `${atValue.params}${atValue.raws.between}`.match(matchValueDefinition);
|
|
231
|
+
if (matchesForValueDefinitions) {
|
|
232
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
233
|
+
const [, key, value] = matchesForValueDefinitions;
|
|
234
|
+
if (key === undefined)
|
|
235
|
+
throw new Error(`unreachable`);
|
|
236
|
+
return { type: 'valueDeclaration', tokenName: key };
|
|
237
|
+
}
|
|
238
|
+
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
239
|
+
throw new Error(`@value statement "${atValue.source}" is invalid!`);
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=postcss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postcss.js","sourceRoot":"","sources":["../../src/locator/postcss.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import dedent from 'dedent';
|
|
2
|
+
import { createRoot, createClassSelectors, createAtImports, createFixtures, createAtValues, } from '../test-util/util.js';
|
|
3
|
+
import { generateLocalTokenNames, getOriginalLocationOfClassSelector, parseAtImport, parseAtValue, collectNodes, getOriginalLocationOfAtValue, } from './postcss.js';
|
|
4
|
+
describe('generateLocalTokenNames', () => {
|
|
5
|
+
test('basic', async () => {
|
|
6
|
+
expect(await generateLocalTokenNames(createRoot(`
|
|
7
|
+
.basic {}
|
|
8
|
+
.cascading {}
|
|
9
|
+
.cascading {}
|
|
10
|
+
.pseudo_class_1 {}
|
|
11
|
+
.pseudo_class_2:hover {}
|
|
12
|
+
:not(.pseudo_class_3) {}
|
|
13
|
+
.multiple_selector_1.multiple_selector_2 {}
|
|
14
|
+
.combinator_1 + .combinator_2 {}
|
|
15
|
+
@supports (display: flex) {
|
|
16
|
+
@media screen and (min-width: 900px) {
|
|
17
|
+
.at_rule {}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
.selector_list_1, .selector_list_2 {}
|
|
21
|
+
:local .local_class_name_1 {}
|
|
22
|
+
:local {
|
|
23
|
+
.local_class_name_2 {}
|
|
24
|
+
.local_class_name_3 {}
|
|
25
|
+
}
|
|
26
|
+
:local(.local_class_name_4) {}
|
|
27
|
+
@value value: #BF4040;
|
|
28
|
+
`))).toStrictEqual([
|
|
29
|
+
'value',
|
|
30
|
+
'basic',
|
|
31
|
+
'cascading',
|
|
32
|
+
'pseudo_class_1',
|
|
33
|
+
'pseudo_class_2',
|
|
34
|
+
'pseudo_class_3',
|
|
35
|
+
'multiple_selector_1',
|
|
36
|
+
'multiple_selector_2',
|
|
37
|
+
'combinator_1',
|
|
38
|
+
'combinator_2',
|
|
39
|
+
'at_rule',
|
|
40
|
+
'selector_list_1',
|
|
41
|
+
'selector_list_2',
|
|
42
|
+
'local_class_name_1',
|
|
43
|
+
'local_class_name_2',
|
|
44
|
+
'local_class_name_3',
|
|
45
|
+
'local_class_name_4',
|
|
46
|
+
]);
|
|
47
|
+
});
|
|
48
|
+
test('does not track styles imported by @import in other file because it is not a local token', async () => {
|
|
49
|
+
createFixtures({
|
|
50
|
+
'/test/1.css': dedent `
|
|
51
|
+
.a {}
|
|
52
|
+
`,
|
|
53
|
+
});
|
|
54
|
+
expect(await generateLocalTokenNames(createRoot(`
|
|
55
|
+
@import "/test/1.css";
|
|
56
|
+
`))).toStrictEqual([]);
|
|
57
|
+
});
|
|
58
|
+
test('does not track styles imported by @value in other file because it is not a local token', async () => {
|
|
59
|
+
createFixtures({
|
|
60
|
+
'/test/1.css': dedent `
|
|
61
|
+
.a {}
|
|
62
|
+
`,
|
|
63
|
+
});
|
|
64
|
+
expect(await generateLocalTokenNames(createRoot(`
|
|
65
|
+
@value a from "/test/1.css";
|
|
66
|
+
`))).toStrictEqual(['a']);
|
|
67
|
+
});
|
|
68
|
+
test('does not track styles imported by composes in other file because it is not a local token', async () => {
|
|
69
|
+
createFixtures({
|
|
70
|
+
'/test/1.css': dedent `
|
|
71
|
+
.b {}
|
|
72
|
+
`,
|
|
73
|
+
});
|
|
74
|
+
expect(await generateLocalTokenNames(createRoot(`
|
|
75
|
+
.a {
|
|
76
|
+
composes: b from "/test/1.css";
|
|
77
|
+
}
|
|
78
|
+
`))).toStrictEqual(['a']);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('getOriginalLocationOfClassSelector', () => {
|
|
82
|
+
test('basic', () => {
|
|
83
|
+
const [basic] = createClassSelectors(createRoot(dedent `
|
|
84
|
+
.basic {}
|
|
85
|
+
`));
|
|
86
|
+
expect(getOriginalLocationOfClassSelector(basic.rule, basic.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 1, column: 1 }, end: { line: 1, column: 6 } }`);
|
|
87
|
+
});
|
|
88
|
+
test('cascading', () => {
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
90
|
+
const [cascading_1, cascading_2] = createClassSelectors(createRoot(dedent `
|
|
91
|
+
.cascading {}
|
|
92
|
+
.cascading {}
|
|
93
|
+
`));
|
|
94
|
+
expect(getOriginalLocationOfClassSelector(cascading_1.rule, cascading_1.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 1, column: 1 }, end: { line: 1, column: 10 } }`);
|
|
95
|
+
expect(getOriginalLocationOfClassSelector(cascading_2.rule, cascading_2.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 2, column: 1 }, end: { line: 2, column: 10 } }`);
|
|
96
|
+
});
|
|
97
|
+
test('pseudo_class', () => {
|
|
98
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
99
|
+
const [pseudo_class_1, pseudo_class_2, pseudo_class_3] = createClassSelectors(createRoot(dedent `
|
|
100
|
+
.pseudo_class_1 {}
|
|
101
|
+
.pseudo_class_2:hover {}
|
|
102
|
+
:not(.pseudo_class_3) {}
|
|
103
|
+
`));
|
|
104
|
+
expect(getOriginalLocationOfClassSelector(pseudo_class_1.rule, pseudo_class_1.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 1, column: 1 }, end: { line: 1, column: 15 } }`);
|
|
105
|
+
expect(getOriginalLocationOfClassSelector(pseudo_class_2.rule, pseudo_class_2.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 2, column: 1 }, end: { line: 2, column: 15 } }`);
|
|
106
|
+
expect(getOriginalLocationOfClassSelector(pseudo_class_3.rule, pseudo_class_3.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 3, column: 6 }, end: { line: 3, column: 20 } }`);
|
|
107
|
+
});
|
|
108
|
+
test('multiple_selector', () => {
|
|
109
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
110
|
+
const [multiple_selector_1, multiple_selector_2] = createClassSelectors(createRoot(dedent `
|
|
111
|
+
.multiple_selector_1.multiple_selector_2 {}
|
|
112
|
+
`));
|
|
113
|
+
expect(getOriginalLocationOfClassSelector(multiple_selector_1.rule, multiple_selector_1.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 1, column: 1 }, end: { line: 1, column: 20 } }`);
|
|
114
|
+
expect(getOriginalLocationOfClassSelector(multiple_selector_2.rule, multiple_selector_2.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 1, column: 21 }, end: { line: 1, column: 40 } }`);
|
|
115
|
+
});
|
|
116
|
+
test('combinator', () => {
|
|
117
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
118
|
+
const [combinator_1, combinator_2] = createClassSelectors(createRoot(dedent `
|
|
119
|
+
.combinator_1 + .combinator_2 {}
|
|
120
|
+
`));
|
|
121
|
+
expect(getOriginalLocationOfClassSelector(combinator_1.rule, combinator_1.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 1, column: 1 }, end: { line: 1, column: 13 } }`);
|
|
122
|
+
expect(getOriginalLocationOfClassSelector(combinator_2.rule, combinator_2.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 1, column: 17 }, end: { line: 1, column: 29 } }`);
|
|
123
|
+
});
|
|
124
|
+
test('at_rule', () => {
|
|
125
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
126
|
+
const [at_rule] = createClassSelectors(createRoot(dedent `
|
|
127
|
+
@supports (display: flex) {
|
|
128
|
+
@media screen and (min-width: 900px) {
|
|
129
|
+
.at_rule {}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
`));
|
|
133
|
+
expect(getOriginalLocationOfClassSelector(at_rule.rule, at_rule.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 3, column: 5 }, end: { line: 3, column: 12 } }`);
|
|
134
|
+
});
|
|
135
|
+
test('selector_list', () => {
|
|
136
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
137
|
+
const [selector_list_1, selector_list_2] = createClassSelectors(createRoot(dedent `
|
|
138
|
+
.selector_list_1, .selector_list_2 {}
|
|
139
|
+
`));
|
|
140
|
+
expect(getOriginalLocationOfClassSelector(selector_list_1.rule, selector_list_1.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 1, column: 1 }, end: { line: 1, column: 16 } }`);
|
|
141
|
+
expect(getOriginalLocationOfClassSelector(selector_list_2.rule, selector_list_2.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 1, column: 19 }, end: { line: 1, column: 34 } }`);
|
|
142
|
+
});
|
|
143
|
+
test('local_class_name', () => {
|
|
144
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
145
|
+
const [local_class_name_1, local_class_name_2, local_class_name_3, local_class_name_4] = createClassSelectors(createRoot(dedent `
|
|
146
|
+
:local .local_class_name_1 {}
|
|
147
|
+
:local {
|
|
148
|
+
.local_class_name_2 {}
|
|
149
|
+
.local_class_name_3 {}
|
|
150
|
+
}
|
|
151
|
+
:local(.local_class_name_4) {}
|
|
152
|
+
`));
|
|
153
|
+
expect(getOriginalLocationOfClassSelector(local_class_name_1.rule, local_class_name_1.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 1, column: 8 }, end: { line: 1, column: 26 } }`);
|
|
154
|
+
expect(getOriginalLocationOfClassSelector(local_class_name_2.rule, local_class_name_2.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 3, column: 3 }, end: { line: 3, column: 21 } }`);
|
|
155
|
+
expect(getOriginalLocationOfClassSelector(local_class_name_3.rule, local_class_name_3.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 4, column: 3 }, end: { line: 4, column: 21 } }`);
|
|
156
|
+
expect(getOriginalLocationOfClassSelector(local_class_name_4.rule, local_class_name_4.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 6, column: 8 }, end: { line: 6, column: 26 } }`);
|
|
157
|
+
});
|
|
158
|
+
test('with_newline', () => {
|
|
159
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
160
|
+
const [with_newline_1, with_newline_2, with_newline_3] = createClassSelectors(createRoot(dedent `
|
|
161
|
+
.with_newline_1,
|
|
162
|
+
.with_newline_2
|
|
163
|
+
+ .with_newline_3, {}
|
|
164
|
+
`));
|
|
165
|
+
expect(getOriginalLocationOfClassSelector(with_newline_1.rule, with_newline_1.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 1, column: 1 }, end: { line: 1, column: 15 } }`);
|
|
166
|
+
expect(getOriginalLocationOfClassSelector(with_newline_2.rule, with_newline_2.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 2, column: 1 }, end: { line: 2, column: 15 } }`);
|
|
167
|
+
expect(getOriginalLocationOfClassSelector(with_newline_3.rule, with_newline_3.classSelector)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 3, column: 5 }, end: { line: 3, column: 19 } }`);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
test('getOriginalLocationOfAtValue', () => {
|
|
171
|
+
function tryGetOriginalLocationOfAtValue(atValue) {
|
|
172
|
+
const parsed = parseAtValue(atValue);
|
|
173
|
+
if (parsed.type === 'valueDeclaration') {
|
|
174
|
+
return getOriginalLocationOfAtValue(atValue, parsed);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
throw new Error('Unexpected type');
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const [basic] = createAtValues(createRoot(dedent `
|
|
181
|
+
@value basic: #000;
|
|
182
|
+
`));
|
|
183
|
+
expect(tryGetOriginalLocationOfAtValue(basic)).toMatchInlineSnapshot(`{ filePath: "/test/test.css", start: { line: 1, column: 8 }, end: { line: 1, column: 13 } }`);
|
|
184
|
+
});
|
|
185
|
+
test('collectNodes', () => {
|
|
186
|
+
const ast = createRoot(dedent `
|
|
187
|
+
@import;
|
|
188
|
+
@import "test.css";
|
|
189
|
+
@ignored;
|
|
190
|
+
.a { ignored: "ignored"; }
|
|
191
|
+
.b { ignored: "ignored"; }
|
|
192
|
+
`);
|
|
193
|
+
const { atImports, classSelectors } = collectNodes(ast);
|
|
194
|
+
expect(atImports).toHaveLength(2);
|
|
195
|
+
expect(atImports[0].toString()).toEqual('@import');
|
|
196
|
+
expect(atImports[1].toString()).toEqual('@import "test.css"');
|
|
197
|
+
expect(classSelectors).toHaveLength(2);
|
|
198
|
+
expect(classSelectors[0].rule.toString()).toEqual('.a { ignored: "ignored"; }');
|
|
199
|
+
expect(classSelectors[0].classSelector.toString()).toEqual('.a');
|
|
200
|
+
expect(classSelectors[1].rule.toString()).toEqual('.b { ignored: "ignored"; }');
|
|
201
|
+
expect(classSelectors[1].classSelector.toString()).toEqual('.b');
|
|
202
|
+
});
|
|
203
|
+
test('parseAtImport', () => {
|
|
204
|
+
const atImports = createAtImports(createRoot(dedent `
|
|
205
|
+
@import;
|
|
206
|
+
@import "test.css";
|
|
207
|
+
@import url("test.css");
|
|
208
|
+
@import url(test.css);
|
|
209
|
+
@import "test.css" print;
|
|
210
|
+
`));
|
|
211
|
+
expect(parseAtImport(atImports[0])).toBe(undefined);
|
|
212
|
+
expect(parseAtImport(atImports[1])).toBe('test.css');
|
|
213
|
+
expect(parseAtImport(atImports[2])).toBe('test.css');
|
|
214
|
+
expect(parseAtImport(atImports[3])).toBe('test.css');
|
|
215
|
+
expect(parseAtImport(atImports[4])).toBe('test.css');
|
|
216
|
+
});
|
|
217
|
+
test('parseAtValue', () => {
|
|
218
|
+
const atValues = createAtValues(createRoot(dedent `
|
|
219
|
+
@value basic: #000;
|
|
220
|
+
@value withoutColon #000;
|
|
221
|
+
@value empty:;
|
|
222
|
+
@value comment:/* comment */;
|
|
223
|
+
@value complex: (max-width: 599px);
|
|
224
|
+
@value import from "test.css";
|
|
225
|
+
@value import1, import2 from "test.css";
|
|
226
|
+
@value import as alias from "test.css";
|
|
227
|
+
/*
|
|
228
|
+
* NOTE: happy-css-modules intentionally does not support module specifier as variable.
|
|
229
|
+
* e.g. \`@value d, e from moduleName;\`
|
|
230
|
+
*/
|
|
231
|
+
`));
|
|
232
|
+
expect(parseAtValue(atValues[0])).toStrictEqual({ type: 'valueDeclaration', tokenName: 'basic' });
|
|
233
|
+
expect(parseAtValue(atValues[1])).toStrictEqual({ type: 'valueDeclaration', tokenName: 'withoutColon' });
|
|
234
|
+
expect(parseAtValue(atValues[2])).toStrictEqual({ type: 'valueDeclaration', tokenName: 'empty' });
|
|
235
|
+
expect(parseAtValue(atValues[3])).toStrictEqual({ type: 'valueDeclaration', tokenName: 'comment' });
|
|
236
|
+
expect(parseAtValue(atValues[4])).toStrictEqual({ type: 'valueDeclaration', tokenName: 'complex' });
|
|
237
|
+
expect(parseAtValue(atValues[5])).toStrictEqual({
|
|
238
|
+
type: 'valueImportDeclaration',
|
|
239
|
+
imports: [{ importedTokenName: 'import', localTokenName: 'import' }],
|
|
240
|
+
from: 'test.css',
|
|
241
|
+
});
|
|
242
|
+
expect(parseAtValue(atValues[6])).toStrictEqual({
|
|
243
|
+
type: 'valueImportDeclaration',
|
|
244
|
+
imports: [
|
|
245
|
+
{ importedTokenName: 'import1', localTokenName: 'import1' },
|
|
246
|
+
{ importedTokenName: 'import2', localTokenName: 'import2' },
|
|
247
|
+
],
|
|
248
|
+
from: 'test.css',
|
|
249
|
+
});
|
|
250
|
+
expect(parseAtValue(atValues[7])).toStrictEqual({
|
|
251
|
+
type: 'valueImportDeclaration',
|
|
252
|
+
imports: [{ importedTokenName: 'import', localTokenName: 'alias' }],
|
|
253
|
+
from: 'test.css',
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
//# sourceMappingURL=postcss.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postcss.test.js","sourceRoot":"","sources":["../../src/locator/postcss.test.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts
ADDED
package/dist/logger.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
const LOG_LEVEL = {
|
|
3
|
+
debug: 2,
|
|
4
|
+
info: 1,
|
|
5
|
+
silent: 0,
|
|
6
|
+
};
|
|
7
|
+
export class Logger {
|
|
8
|
+
constructor(logLevelLabel) {
|
|
9
|
+
this.logLevel = LOG_LEVEL[logLevelLabel];
|
|
10
|
+
}
|
|
11
|
+
debug(message) {
|
|
12
|
+
if (this.logLevel >= LOG_LEVEL['debug']) {
|
|
13
|
+
// eslint-disable-next-line no-console
|
|
14
|
+
console.log('[debug]', message);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
info(message) {
|
|
18
|
+
if (this.logLevel >= LOG_LEVEL['info']) {
|
|
19
|
+
// eslint-disable-next-line no-console
|
|
20
|
+
console.log(chalk.blue('[info]'), message);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
error(message) {
|
|
24
|
+
// eslint-disable-next-line no-console
|
|
25
|
+
console.error(chalk.red('[error]'), message);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=logger.js.map
|