happy-css-modules 3.0.1 → 3.1.0

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.
Files changed (141) hide show
  1. package/package.json +1 -1
  2. package/src/emitter/dts.test.ts +3 -3
  3. package/src/emitter/dts.ts +59 -37
  4. package/src/emitter/index.test.ts +3 -3
  5. package/src/locator/index.test.ts +143 -48
  6. package/src/locator/index.ts +51 -23
  7. package/src/locator/postcss.test.ts +135 -26
  8. package/src/locator/postcss.ts +120 -36
  9. package/src/test-util/util.ts +23 -18
  10. package/src/transformer/less-transformer.test.ts +25 -15
  11. package/src/transformer/postcss-transformer.test.ts +5 -3
  12. package/src/transformer/scss-transformer.test.ts +38 -19
  13. package/dist/cli.d.ts +0 -6
  14. package/dist/cli.js +0 -121
  15. package/dist/cli.js.map +0 -1
  16. package/dist/cli.test.d.ts +0 -1
  17. package/dist/cli.test.js +0 -66
  18. package/dist/cli.test.js.map +0 -1
  19. package/dist/config.d.ts +0 -1
  20. package/dist/config.js +0 -2
  21. package/dist/config.js.map +0 -1
  22. package/dist/emitter/dts.d.ts +0 -14
  23. package/dist/emitter/dts.js +0 -111
  24. package/dist/emitter/dts.js.map +0 -1
  25. package/dist/emitter/dts.test.d.ts +0 -1
  26. package/dist/emitter/dts.test.js +0 -205
  27. package/dist/emitter/dts.test.js.map +0 -1
  28. package/dist/emitter/file-system.d.ts +0 -6
  29. package/dist/emitter/file-system.js +0 -26
  30. package/dist/emitter/file-system.js.map +0 -1
  31. package/dist/emitter/file-system.test.d.ts +0 -1
  32. package/dist/emitter/file-system.test.js +0 -34
  33. package/dist/emitter/file-system.test.js.map +0 -1
  34. package/dist/emitter/index.d.ts +0 -34
  35. package/dist/emitter/index.js +0 -49
  36. package/dist/emitter/index.js.map +0 -1
  37. package/dist/emitter/index.test.d.ts +0 -1
  38. package/dist/emitter/index.test.js +0 -68
  39. package/dist/emitter/index.test.js.map +0 -1
  40. package/dist/emitter/source-map.d.ts +0 -8
  41. package/dist/emitter/source-map.js +0 -16
  42. package/dist/emitter/source-map.js.map +0 -1
  43. package/dist/emitter/source-map.test.d.ts +0 -1
  44. package/dist/emitter/source-map.test.js +0 -13
  45. package/dist/emitter/source-map.test.js.map +0 -1
  46. package/dist/index.d.ts +0 -5
  47. package/dist/index.js +0 -6
  48. package/dist/index.js.map +0 -1
  49. package/dist/integration-test/go-to-definition.test.d.ts +0 -1
  50. package/dist/integration-test/go-to-definition.test.js +0 -334
  51. package/dist/integration-test/go-to-definition.test.js.map +0 -1
  52. package/dist/library/source-map/index.d.ts +0 -8
  53. package/dist/library/source-map/index.js +0 -5
  54. package/dist/library/source-map/index.js.map +0 -1
  55. package/dist/locator/index.d.ts +0 -44
  56. package/dist/locator/index.js +0 -147
  57. package/dist/locator/index.js.map +0 -1
  58. package/dist/locator/index.test.d.ts +0 -1
  59. package/dist/locator/index.test.js +0 -299
  60. package/dist/locator/index.test.js.map +0 -1
  61. package/dist/locator/postcss.d.ts +0 -53
  62. package/dist/locator/postcss.js +0 -169
  63. package/dist/locator/postcss.js.map +0 -1
  64. package/dist/locator/postcss.test.d.ts +0 -1
  65. package/dist/locator/postcss.test.js +0 -196
  66. package/dist/locator/postcss.test.js.map +0 -1
  67. package/dist/logger.d.ts +0 -9
  68. package/dist/logger.js +0 -28
  69. package/dist/logger.js.map +0 -1
  70. package/dist/regression-test/issue-168.test.d.ts +0 -1
  71. package/dist/regression-test/issue-168.test.js +0 -30
  72. package/dist/regression-test/issue-168.test.js.map +0 -1
  73. package/dist/resolver/index.d.ts +0 -22
  74. package/dist/resolver/index.js +0 -44
  75. package/dist/resolver/index.js.map +0 -1
  76. package/dist/resolver/index.test.d.ts +0 -1
  77. package/dist/resolver/index.test.js +0 -16
  78. package/dist/resolver/index.test.js.map +0 -1
  79. package/dist/resolver/node-resolver.d.ts +0 -2
  80. package/dist/resolver/node-resolver.js +0 -6
  81. package/dist/resolver/node-resolver.js.map +0 -1
  82. package/dist/resolver/node-resolver.test.d.ts +0 -1
  83. package/dist/resolver/node-resolver.test.js +0 -25
  84. package/dist/resolver/node-resolver.test.js.map +0 -1
  85. package/dist/resolver/relative-resolver.d.ts +0 -2
  86. package/dist/resolver/relative-resolver.js +0 -5
  87. package/dist/resolver/relative-resolver.js.map +0 -1
  88. package/dist/resolver/relative-resolver.test.d.ts +0 -1
  89. package/dist/resolver/relative-resolver.test.js +0 -12
  90. package/dist/resolver/relative-resolver.test.js.map +0 -1
  91. package/dist/resolver/webpack-resolver.d.ts +0 -24
  92. package/dist/resolver/webpack-resolver.js +0 -91
  93. package/dist/resolver/webpack-resolver.js.map +0 -1
  94. package/dist/resolver/webpack-resolver.test.d.ts +0 -1
  95. package/dist/resolver/webpack-resolver.test.js +0 -89
  96. package/dist/resolver/webpack-resolver.test.js.map +0 -1
  97. package/dist/runner.d.ts +0 -76
  98. package/dist/runner.js +0 -120
  99. package/dist/runner.js.map +0 -1
  100. package/dist/runner.test.d.ts +0 -1
  101. package/dist/runner.test.js +0 -287
  102. package/dist/runner.test.js.map +0 -1
  103. package/dist/test-util/jest/resolver.cjs +0 -31
  104. package/dist/test-util/jest/resolver.cjs.map +0 -1
  105. package/dist/test-util/jest/resolver.d.cts +0 -16
  106. package/dist/test-util/tsserver.d.ts +0 -31
  107. package/dist/test-util/tsserver.js +0 -112
  108. package/dist/test-util/tsserver.js.map +0 -1
  109. package/dist/test-util/util.d.ts +0 -28
  110. package/dist/test-util/util.js +0 -81
  111. package/dist/test-util/util.js.map +0 -1
  112. package/dist/transformer/index.d.ts +0 -30
  113. package/dist/transformer/index.js +0 -25
  114. package/dist/transformer/index.js.map +0 -1
  115. package/dist/transformer/index.test.d.ts +0 -1
  116. package/dist/transformer/index.test.js +0 -66
  117. package/dist/transformer/index.test.js.map +0 -1
  118. package/dist/transformer/less-transformer.d.ts +0 -2
  119. package/dist/transformer/less-transformer.js +0 -45
  120. package/dist/transformer/less-transformer.js.map +0 -1
  121. package/dist/transformer/less-transformer.test.d.ts +0 -1
  122. package/dist/transformer/less-transformer.test.js +0 -124
  123. package/dist/transformer/less-transformer.test.js.map +0 -1
  124. package/dist/transformer/postcss-transformer.d.ts +0 -12
  125. package/dist/transformer/postcss-transformer.js +0 -32
  126. package/dist/transformer/postcss-transformer.js.map +0 -1
  127. package/dist/transformer/postcss-transformer.test.d.ts +0 -1
  128. package/dist/transformer/postcss-transformer.test.js +0 -176
  129. package/dist/transformer/postcss-transformer.test.js.map +0 -1
  130. package/dist/transformer/scss-transformer.d.ts +0 -2
  131. package/dist/transformer/scss-transformer.js +0 -40
  132. package/dist/transformer/scss-transformer.js.map +0 -1
  133. package/dist/transformer/scss-transformer.test.d.ts +0 -1
  134. package/dist/transformer/scss-transformer.test.js +0 -130
  135. package/dist/transformer/scss-transformer.test.js.map +0 -1
  136. package/dist/util.d.ts +0 -21
  137. package/dist/util.js +0 -72
  138. package/dist/util.js.map +0 -1
  139. package/dist/util.test.d.ts +0 -1
  140. package/dist/util.test.js +0 -74
  141. package/dist/util.test.js.map +0 -1
@@ -1,12 +0,0 @@
1
- import type { Transformer } from '../index.js';
2
- export type PostcssTransformerOptions = {
3
- cwd?: string | undefined;
4
- /**
5
- * The option compatible with postcss's `--config`. It is a relative or absolute path.
6
- * @example '.'
7
- * @example 'postcss.config.js'
8
- * @example '/home/user/repository/src'
9
- */
10
- postcssConfig?: string | undefined;
11
- };
12
- export declare const createPostcssTransformer: (postcssTransformerOptions?: PostcssTransformerOptions) => Transformer;
@@ -1,32 +0,0 @@
1
- import { createRequire } from 'node:module';
2
- import { resolve } from 'node:path';
3
- import postcss from 'postcss';
4
- const require = createRequire(import.meta.url);
5
- const postcssrc = require('postcss-load-config');
6
- function isDependencyMessage(message) {
7
- return message.type === 'dependency';
8
- }
9
- export const createPostcssTransformer = (postcssTransformerOptions) => {
10
- const cwd = postcssTransformerOptions?.cwd ?? process.cwd();
11
- const configSearchPath = postcssTransformerOptions?.postcssConfig
12
- ? resolve(cwd, postcssTransformerOptions?.postcssConfig)
13
- : cwd;
14
- return async (source, options) => {
15
- // NOTE: postcss-load-config cache the configuration file so is is not reloaded.
16
- const postcssConfig = await postcssrc({ cwd }, configSearchPath).catch((e) => {
17
- if (e instanceof Error && e.message.includes('No PostCSS Config found'))
18
- return undefined;
19
- throw e;
20
- });
21
- if (postcssConfig === undefined)
22
- return false;
23
- const result = await postcss.default(postcssConfig.plugins).process(source, {
24
- ...postcssConfig.options,
25
- from: options.from,
26
- map: { inline: false, absolute: true },
27
- });
28
- const dependencies = result.messages.filter(isDependencyMessage).map((message) => message.file);
29
- return { css: result.css, map: result.map, dependencies };
30
- };
31
- };
32
- //# sourceMappingURL=postcss-transformer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postcss-transformer.js","sourceRoot":"","sources":["../../src/transformer/postcss-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,OAAyB,MAAM,SAAS,CAAC;AAIhD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,SAAS,GAAyC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAQvF,SAAS,mBAAmB,CAAC,OAAgB;IAC3C,OAAO,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC;AACvC,CAAC;AAaD,MAAM,CAAC,MAAM,wBAAwB,GAA2E,CAC9G,yBAAyB,EACzB,EAAE;IACF,MAAM,GAAG,GAAG,yBAAyB,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC5D,MAAM,gBAAgB,GAAG,yBAAyB,EAAE,aAAa;QAC/D,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,yBAAyB,EAAE,aAAa,CAAC;QACxD,CAAC,CAAC,GAAG,CAAC;IACR,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC/B,gFAAgF;QAChF,MAAM,aAAa,GAAuB,MAAM,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YAC/F,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC;gBAAE,OAAO,SAAS,CAAC;YAC1F,MAAM,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;QACH,IAAI,aAAa,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAE9C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE;YAC1E,GAAG,aAAa,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;SACvC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEhG,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC;IAC5D,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,176 +0,0 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { createRequire } from 'node:module';
3
- import { jest } from '@jest/globals';
4
- import dedent from 'dedent';
5
- import { Locator } from '../locator/index.js';
6
- import { createFixtures, getFixturePath } from '../test-util/util.js';
7
- import { createPostcssTransformer } from './postcss-transformer.js';
8
- const cwd = getFixturePath('/');
9
- const require = createRequire(import.meta.url);
10
- // NOTE: postcss-load-config caches the configuration file using the path as a key.
11
- // Therefore, change the path for each test case so that a new configuration file is always used.
12
- test('handles postcss features', async () => {
13
- const uuid = randomUUID();
14
- const locator = new Locator({
15
- transformer: createPostcssTransformer({
16
- cwd,
17
- postcssConfig: `${uuid}/postcss.config.js`,
18
- }),
19
- });
20
- createFixtures({
21
- [`/${uuid}/postcss.config.js`]: dedent `
22
- module.exports = {
23
- plugins: [
24
- require('${require.resolve('postcss-simple-vars')}'),
25
- ],
26
- };
27
- `,
28
- '/test/1.css': dedent `
29
- $prefix: foo;
30
- .$(prefix)_bar {}
31
- `,
32
- });
33
- const result = await locator.load(getFixturePath('/test/1.css'));
34
- expect(result).toMatchInlineSnapshot(`
35
- {
36
- dependencies: [],
37
- tokens: [
38
- {
39
- name: "foo_bar",
40
- originalLocations: [
41
- { filePath: "<fixtures>/test/1.css", start: { line: 2, column: 1 }, end: { line: 2, column: 8 } },
42
- ],
43
- },
44
- ],
45
- }
46
- `);
47
- });
48
- test('tracks dependencies that have been pre-bundled by postcss compiler', async () => {
49
- const uuid = randomUUID();
50
- const locator = new Locator({
51
- transformer: createPostcssTransformer({
52
- cwd,
53
- postcssConfig: `${uuid}/postcss.config.js`,
54
- }),
55
- });
56
- const loadSpy = jest.spyOn(locator, 'load');
57
- createFixtures({
58
- [`/${uuid}/postcss.config.js`]: dedent `
59
- module.exports = {
60
- plugins: [
61
- require('${require.resolve('postcss-import')}'),
62
- ],
63
- };
64
- `,
65
- '/test/1.css': dedent `
66
- @import './2.css';
67
- @import './3.css';
68
- `,
69
- '/test/2.css': ``,
70
- '/test/3.css': `@import './4.css'`,
71
- '/test/4.css': ``,
72
- });
73
- const result = await locator.load(getFixturePath('/test/1.css'));
74
- // The files imported using @import are pre-bundled by the compiler.
75
- // Therefore, `Locator#load` is not called to process other files.
76
- expect(loadSpy).toBeCalledTimes(1);
77
- expect(loadSpy).toHaveBeenNthCalledWith(1, getFixturePath('/test/1.css'));
78
- // The files pre-bundled by the compiler are also included in `result.dependencies`
79
- expect(result.dependencies).toStrictEqual(['/test/2.css', '/test/3.css', '/test/4.css'].map(getFixturePath));
80
- });
81
- test('resolves specifier using resolver', async () => {
82
- const uuid = randomUUID();
83
- const locator = new Locator({
84
- transformer: createPostcssTransformer({
85
- cwd,
86
- postcssConfig: `${uuid}/postcss.config.js`,
87
- }),
88
- });
89
- createFixtures({
90
- [`/${uuid}/postcss.config.js`]: dedent `
91
- module.exports = {
92
- plugins: [
93
- // When using postcss-import, the resolver of happy-css-modules is ignored.
94
- // Therefore, we test here without postcss-import.
95
- // require('${require.resolve('postcss-import')}'),
96
- ],
97
- };
98
- `,
99
- '/test/1.css': dedent `
100
- @import 'package';
101
- `,
102
- '/node_modules/package/index.css': `.a {}`,
103
- });
104
- const result = await locator.load(getFixturePath('/test/1.css'));
105
- expect(result.dependencies).toStrictEqual(['/node_modules/package/index.css'].map(getFixturePath));
106
- });
107
- test('ignores http(s) protocol file', async () => {
108
- const uuid = randomUUID();
109
- const locator = new Locator({
110
- transformer: createPostcssTransformer({
111
- cwd,
112
- postcssConfig: `${uuid}/postcss.config.js`,
113
- }),
114
- });
115
- createFixtures({
116
- [`/${uuid}/postcss.config.js`]: dedent `
117
- module.exports = {
118
- plugins: [
119
- // When using postcss-import, the resolver of happy-css-modules is ignored.
120
- // Therefore, we test here without postcss-import.
121
- // require('${require.resolve('postcss-import')}'),
122
- ],
123
- };
124
- `,
125
- '/test/1.css': dedent `
126
- @import 'http://example.com/path/http.css';
127
- @import 'https://example.com/path/https.css';
128
- `,
129
- });
130
- const result = await locator.load(getFixturePath('/test/1.css'));
131
- expect(result.dependencies).toStrictEqual([]);
132
- });
133
- test('returns false if postcssrc is not found', async () => {
134
- const uuid = randomUUID();
135
- const transformer = createPostcssTransformer({
136
- cwd,
137
- postcssConfig: `${uuid}/postcss.config.js`,
138
- });
139
- createFixtures({
140
- '/test/1.css': dedent `
141
- @import 'http://example.com/path/http.css';
142
- @import 'https://example.com/path/https.css';
143
- `,
144
- });
145
- expect(await transformer('', {
146
- from: getFixturePath('/test/1.css'),
147
- isIgnoredSpecifier: () => false,
148
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
149
- resolver: jest.fn(),
150
- })).toBe(false);
151
- });
152
- test('searches config from cwd if postcssConfig option is missing', async () => {
153
- const uuid = randomUUID();
154
- const cwd = `/${uuid}`;
155
- const locator = new Locator({
156
- transformer: createPostcssTransformer({
157
- cwd: getFixturePath(cwd),
158
- }),
159
- });
160
- createFixtures({
161
- [`/${uuid}/postcss.config.js`]: dedent `
162
- module.exports = {
163
- plugins: [
164
- require('${require.resolve('postcss-simple-vars')}'),
165
- ],
166
- };
167
- `,
168
- '/test/1.css': dedent `
169
- $prefix: foo;
170
- .$(prefix)_bar {}
171
- `,
172
- });
173
- const result = await locator.load(getFixturePath('/test/1.css'));
174
- expect(result.tokens.map((token) => token.name)).toStrictEqual(['foo_bar']);
175
- });
176
- //# sourceMappingURL=postcss-transformer.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postcss-transformer.test.js","sourceRoot":"","sources":["../../src/transformer/postcss-transformer.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import type { Transformer } from './index.js';
2
- export declare const createScssTransformer: () => Transformer;
@@ -1,40 +0,0 @@
1
- // NOTE: The workaround for using sass's modern API. happy-css-modules used to use this API.
2
- // However, due to the implementation of custom resolvers, we have switched to the legacy API.
3
- // Therefore, the workaround is now disabled. See
4
- // https://github.com/mizdra/happy-css-modules/issues/65#issuecomment-1229471950 for more information.
5
- import { handleImportError } from './index.js';
6
- // For some reason, `util.promisify` does not work. Therefore, use the original promisify.
7
- function promisifySassRender(sass) {
8
- return async (options) => {
9
- return new Promise((resolve, reject) => {
10
- sass.render(options, (exception, result) => {
11
- if (exception)
12
- reject(exception);
13
- else
14
- resolve(result);
15
- });
16
- });
17
- };
18
- }
19
- export const createScssTransformer = () => {
20
- let sass;
21
- return async (source, options) => {
22
- // eslint-disable-next-line require-atomic-updates
23
- sass ??= await import('sass').catch(handleImportError('sass'));
24
- const render = promisifySassRender(sass);
25
- const result = await render({
26
- data: source,
27
- file: options.from,
28
- outFile: 'DUMMY', // Required for sourcemap output.
29
- sourceMap: true,
30
- importer: (url, prev, done) => {
31
- options
32
- .resolver(url, { request: prev })
33
- .then((resolved) => done({ file: resolved }))
34
- .catch((e) => done(e));
35
- },
36
- });
37
- return { css: result.css.toString(), map: result.map.toString(), dependencies: result.stats.includedFiles };
38
- };
39
- };
40
- //# sourceMappingURL=scss-transformer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scss-transformer.js","sourceRoot":"","sources":["../../src/transformer/scss-transformer.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,8FAA8F;AAC9F,iDAAiD;AACjD,sGAAsG;AAItG,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,0FAA0F;AAC1F,SAAS,mBAAmB,CAAC,IAA2B;IACtD,OAAO,KAAK,EAAE,OAA+B,EAAE,EAAE;QAC/C,OAAO,IAAI,OAAO,CAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;gBACzC,IAAI,SAAS;oBAAE,MAAM,CAAC,SAAS,CAAC,CAAC;;oBAC5B,OAAO,CAAC,MAAO,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAsB,GAAG,EAAE;IAC3D,IAAI,IAA2B,CAAC;IAChC,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC/B,kDAAkD;QAClD,IAAI,KAAK,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;YAC1B,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,EAAE,iCAAiC;YACnD,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;gBAC5B,OAAO;qBACJ,QAAQ,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;qBAChC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;qBAC5C,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;SACF,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC/G,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,130 +0,0 @@
1
- import { jest } from '@jest/globals';
2
- import dedent from 'dedent';
3
- import { Locator } from '../locator/index.js';
4
- import { createFixtures, getFixturePath } from '../test-util/util.js';
5
- import { createScssTransformer } from './scss-transformer.js';
6
- const locator = new Locator({ transformer: createScssTransformer() });
7
- const loadSpy = jest.spyOn(locator, 'load');
8
- afterEach(() => {
9
- loadSpy.mockClear();
10
- });
11
- test('handles sass features', async () => {
12
- createFixtures({
13
- '/test/1.scss': dedent `
14
- @use './2.scss' as two; // sass feature test (@use)
15
- @import './3.scss'; // css feature test (@import)
16
- .a_1 { dummy: ''; }
17
- .a_2 {
18
- dummy: '';
19
- // sass feature test (nesting)
20
- .a_2_1 { dummy: ''; }
21
- &_2 { dummy: ''; }
22
- }
23
- `,
24
- '/test/2.scss': dedent `
25
- .b_1 { dummy: ''; }
26
- @mixin b_2 { dummy: ''; }
27
- `,
28
- '/test/3.scss': dedent `
29
- .c { dummy: ''; }
30
- `,
31
- '/test/4.scss': dedent `
32
- .d { dummy: ''; }
33
- `,
34
- });
35
- const result = await locator.load(getFixturePath('/test/1.scss'));
36
- // NOTE: There should be only one originalLocations for 'a_2', but there are multiple.
37
- // This is probably due to an incorrect sourcemap output by the sass compiler.
38
- // FIXME: The sass compiler or Loader implementation needs to be fixed.
39
- // FIXME: The end position of 'a_2_2' is incorrect.
40
- expect(result).toMatchInlineSnapshot(`
41
- {
42
- dependencies: ["<fixtures>/test/2.scss", "<fixtures>/test/3.scss"],
43
- tokens: [
44
- {
45
- name: "b_1",
46
- originalLocations: [
47
- { filePath: "<fixtures>/test/2.scss", start: { line: 1, column: 1 }, end: { line: 1, column: 4 } },
48
- ],
49
- },
50
- {
51
- name: "c",
52
- originalLocations: [
53
- { filePath: "<fixtures>/test/3.scss", start: { line: 1, column: 1 }, end: { line: 1, column: 2 } },
54
- ],
55
- },
56
- {
57
- name: "a_1",
58
- originalLocations: [
59
- { filePath: "<fixtures>/test/1.scss", start: { line: 3, column: 1 }, end: { line: 3, column: 4 } },
60
- ],
61
- },
62
- {
63
- name: "a_2",
64
- originalLocations: [
65
- { filePath: "<fixtures>/test/1.scss", start: { line: 4, column: 1 }, end: { line: 4, column: 4 } },
66
- { filePath: "<fixtures>/test/1.scss", start: { line: 7, column: 3 }, end: { line: 7, column: 6 } },
67
- ],
68
- },
69
- {
70
- name: "a_2_1",
71
- originalLocations: [
72
- { filePath: "<fixtures>/test/1.scss", start: { line: 7, column: 3 }, end: { line: 7, column: 8 } },
73
- ],
74
- },
75
- {
76
- name: "a_2_2",
77
- originalLocations: [
78
- { filePath: "<fixtures>/test/1.scss", start: { line: 8, column: 3 }, end: { line: 8, column: 8 } },
79
- ],
80
- },
81
- ],
82
- }
83
- `);
84
- });
85
- test('tracks dependencies that have been pre-bundled by sass compiler', async () => {
86
- createFixtures({
87
- '/test/1.scss': dedent `
88
- @import './2.scss';
89
- @import './3.scss';
90
- `,
91
- '/test/2.scss': dedent `
92
- `,
93
- '/test/3.scss': dedent `
94
- @import './4.scss';
95
- `,
96
- '/test/4.scss': dedent `
97
- `,
98
- });
99
- const result = await locator.load(getFixturePath('/test/1.scss'));
100
- // The files imported using @import are pre-bundled by the compiler.
101
- // Therefore, `Locator#load` is not called to process other files.
102
- expect(loadSpy).toBeCalledTimes(1);
103
- expect(loadSpy).toHaveBeenNthCalledWith(1, getFixturePath('/test/1.scss'));
104
- // The files pre-bundled by the compiler are also included in `result.dependencies`
105
- expect(result.dependencies).toStrictEqual(['/test/2.scss', '/test/3.scss', '/test/4.scss'].map(getFixturePath));
106
- });
107
- test('resolves specifier using resolver', async () => {
108
- createFixtures({
109
- '/test/1.scss': dedent `
110
- @import 'package-1';
111
- @import 'package-2';
112
- `,
113
- '/node_modules/package-1/index.css': `.a {}`,
114
- '/node_modules/package-2/index.scss': `.a {}`,
115
- });
116
- const result = await locator.load(getFixturePath('/test/1.scss'));
117
- expect(result.dependencies).toStrictEqual(['/node_modules/package-1/index.css', '/node_modules/package-2/index.scss'].map(getFixturePath));
118
- });
119
- test('ignores http(s) protocol file', async () => {
120
- createFixtures({
121
- '/test/1.scss': dedent `
122
- @import 'http://example.com/path/http.css';
123
- @import 'https://example.com/path/https.css';
124
- @import 'https://example.com/path/scss.scss';
125
- `,
126
- });
127
- const result = await locator.load(getFixturePath('/test/1.scss'));
128
- expect(result.dependencies).toStrictEqual([]);
129
- });
130
- //# sourceMappingURL=scss-transformer.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scss-transformer.test.js","sourceRoot":"","sources":["../../src/transformer/scss-transformer.test.ts"],"names":[],"mappings":"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"}
package/dist/util.d.ts DELETED
@@ -1,21 +0,0 @@
1
- /**
2
- * The SystemError type of Node.js.
3
- * @see https://nodejs.org/api/errors.html#class-systemerror
4
- */
5
- export interface SystemError {
6
- code: string;
7
- }
8
- export declare function isSystemError(value: unknown): value is SystemError;
9
- export declare function isObject(value: unknown): value is object;
10
- export declare function hasProp<T extends string>(obj: object, prop: T): obj is {
11
- [key in T]: unknown;
12
- };
13
- export declare function unique<T>(array: T[]): T[];
14
- export declare function uniqueBy<T, U>(arr: T[], fn: (el: T) => U): T[];
15
- export declare function sleepSync(ms: number): void;
16
- export declare function exists(path: string): Promise<boolean>;
17
- export declare function isMatchByGlob(filePath: string, pattern: string, options: {
18
- cwd: string;
19
- }): boolean;
20
- export declare function getPackageJson(): any;
21
- export declare function getInstalledPeerDependencies(): string[];
package/dist/util.js DELETED
@@ -1,72 +0,0 @@
1
- import { constants, readFileSync } from 'fs';
2
- import { access } from 'fs/promises';
3
- import { join, dirname, resolve } from 'path';
4
- import { fileURLToPath } from 'url';
5
- import { resolve as importMetaResolve } from 'import-meta-resolve';
6
- import { minimatch } from 'minimatch';
7
- export function isSystemError(value) {
8
- return (isObject(value) &&
9
- hasProp(value, 'constructor') &&
10
- isObject(value.constructor) &&
11
- hasProp(value.constructor, 'name') &&
12
- value.constructor.name === 'Error' &&
13
- hasProp(value, 'code') &&
14
- typeof value.code === 'string');
15
- }
16
- export function isObject(value) {
17
- return (typeof value === 'object' || typeof value === 'function') && value !== null;
18
- }
19
- export function hasProp(obj, prop) {
20
- return prop in obj;
21
- }
22
- export function unique(array) {
23
- return [...new Set(array)];
24
- }
25
- export function uniqueBy(arr, fn) {
26
- const result = [];
27
- const keys = new Set();
28
- for (const el of arr) {
29
- const key = fn(el);
30
- if (!keys.has(key)) {
31
- keys.add(key);
32
- result.push(el);
33
- }
34
- }
35
- return result;
36
- }
37
- export function sleepSync(ms) {
38
- const start = Date.now();
39
- // eslint-disable-next-line no-empty
40
- while (Date.now() - start < ms) { }
41
- }
42
- export async function exists(path) {
43
- try {
44
- await access(path, constants.F_OK);
45
- return true;
46
- }
47
- catch (e) {
48
- return false;
49
- }
50
- }
51
- export function isMatchByGlob(filePath, pattern, options) {
52
- return minimatch(filePath, join(options.cwd, pattern), { windowsPathsNoEscape: true });
53
- }
54
- export function getPackageJson() {
55
- return JSON.parse(readFileSync(resolve(dirname(fileURLToPath(import.meta.url)), '../package.json'), 'utf-8'));
56
- }
57
- export function getInstalledPeerDependencies() {
58
- const pkgJson = getPackageJson();
59
- const result = [];
60
- for (const deps of Object.keys(pkgJson.peerDependencies)) {
61
- try {
62
- importMetaResolve(deps, import.meta.url);
63
- // If the package is installed, push it to the result array.
64
- result.push(deps);
65
- }
66
- catch {
67
- // If the package is not installed, do nothing.
68
- }
69
- }
70
- return result;
71
- }
72
- //# sourceMappingURL=util.js.map
package/dist/util.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
package/dist/util.test.js DELETED
@@ -1,74 +0,0 @@
1
- import { join } from 'path';
2
- import { createFixtures, getFixturePath } from './test-util/util.js';
3
- import { hasProp, isObject, isSystemError, unique, uniqueBy, isMatchByGlob, exists } from './util.js';
4
- function fakeSystemError({ code }) {
5
- const error = new Error();
6
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
- error.code = code;
8
- return error;
9
- }
10
- test('isSystemError', () => {
11
- expect(isSystemError(fakeSystemError({ code: 'ENOENT' }))).toBe(true);
12
- expect(isSystemError(fakeSystemError({ code: 'EACCES' }))).toBe(true);
13
- expect(isSystemError(new Error('ENOENT'))).toBe(false);
14
- expect(isSystemError({ code: 'ENOENT' })).toBe(false);
15
- });
16
- test('isObject', () => {
17
- expect(isObject({})).toBe(true);
18
- expect(isObject({ a: '1' })).toBe(true);
19
- expect(isObject([])).toBe(true);
20
- expect(isObject(() => {
21
- /* noop */
22
- })).toBe(true);
23
- expect(isObject(null)).toBe(false);
24
- expect(isObject(undefined)).toBe(false);
25
- expect(isObject(1)).toBe(false);
26
- expect(isObject('1')).toBe(false);
27
- expect(isObject(true)).toBe(false);
28
- });
29
- test('hasProp', () => {
30
- expect(hasProp({ a: '1' }, 'a')).toBe(true);
31
- expect(hasProp({ a: '1' }, 'b')).toBe(false);
32
- // it can check prototype
33
- expect(hasProp({}, 'toString')).toBe(true);
34
- expect(hasProp([], 'length')).toBe(true);
35
- });
36
- test('unique', () => {
37
- expect(unique([0, 1, 1, 2, 1])).toStrictEqual([0, 1, 2]);
38
- });
39
- test('uniqueBy', () => {
40
- expect(uniqueBy([], () => 0)).toStrictEqual([]);
41
- expect(uniqueBy([
42
- { key: 'a', value: 0 },
43
- { key: 'a', value: 1 },
44
- { key: 'b', value: 2 },
45
- { key: 'b', value: 3 },
46
- { key: 'c', value: 4 },
47
- { key: 'c', value: 5 },
48
- ], (el) => el.key)).toStrictEqual([
49
- { key: 'a', value: 0 },
50
- { key: 'b', value: 2 },
51
- { key: 'c', value: 4 },
52
- ]);
53
- });
54
- test('exists', async () => {
55
- createFixtures({
56
- '/test/1.css': `.a {}`,
57
- });
58
- expect(await exists(getFixturePath('/test/1.css'))).toBe(true);
59
- expect(await exists(getFixturePath('/test/2.css'))).toBe(false);
60
- });
61
- test('isMatchByGlob', () => {
62
- const cwd = process.cwd();
63
- expect(isMatchByGlob(join(cwd, '1.css'), '*.css', { cwd })).toBe(true);
64
- expect(isMatchByGlob(join(cwd, '1.scss'), '*.css', { cwd })).toBe(false);
65
- expect(isMatchByGlob(join(cwd, 'dir/1.css'), '**/*.css', { cwd })).toBe(true);
66
- expect(isMatchByGlob(join(cwd, 'dir/dir/1.css'), '**/*.css', { cwd })).toBe(true);
67
- expect(isMatchByGlob(join(cwd, '1.css'), '*.{css,scss}', { cwd })).toBe(true);
68
- expect(isMatchByGlob(join(cwd, '1.scss'), '*.{css,scss}', { cwd })).toBe(true);
69
- expect(isMatchByGlob(join(cwd, '1.less'), '*.{css,scss}', { cwd })).toBe(false);
70
- expect(isMatchByGlob(join(cwd, '1.css'), '!(*.css)', { cwd })).toBe(false);
71
- expect(isMatchByGlob(join(cwd, '1.scss'), '!(*.css)', { cwd })).toBe(true);
72
- expect(isMatchByGlob(join(cwd, '1.less'), '!(*.css)', { cwd })).toBe(true);
73
- });
74
- //# sourceMappingURL=util.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.test.js","sourceRoot":"","sources":["../src/util.test.ts"],"names":[],"mappings":"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"}