@knighted/css 1.0.0-rc.13 → 1.0.0-rc.15
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/cjs/loader-helpers.cjs +6 -0
- package/dist/cjs/loader-helpers.d.cts +4 -0
- package/dist/cjs/loader.cjs +2 -0
- package/dist/cjs/loader.d.cts +2 -1
- package/dist/cjs/moduleGraph.cjs +5 -4
- package/dist/cjs/stableSelectorsLiteral.cjs +8 -5
- package/dist/cjs/stableSelectorsLiteral.d.cts +2 -0
- package/dist/loader-helpers.d.ts +4 -0
- package/dist/loader-helpers.js +3 -0
- package/dist/loader.d.ts +2 -1
- package/dist/loader.js +2 -0
- package/dist/moduleGraph.js +5 -4
- package/dist/stableSelectorsLiteral.d.ts +2 -0
- package/dist/stableSelectorsLiteral.js +8 -5
- package/loader-queries.d.ts +6 -1
- package/package.json +9 -1
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { KnightedCssCombinedModule } from './loader.cjs';
|
|
2
|
+
type KnightedCssCombinedExtras = Readonly<Record<string, unknown>>;
|
|
3
|
+
export declare function asKnightedCssCombinedModule<TModule, TExtras extends KnightedCssCombinedExtras = Record<never, never>>(module: unknown): KnightedCssCombinedModule<TModule, TExtras>;
|
|
4
|
+
export {};
|
package/dist/cjs/loader.cjs
CHANGED
|
@@ -18,6 +18,7 @@ const loader = async function loader(source) {
|
|
|
18
18
|
namespace: resolvedNamespace,
|
|
19
19
|
resourcePath: this.resourcePath,
|
|
20
20
|
emitWarning: message => emitKnightedWarning(this, message),
|
|
21
|
+
target: 'js',
|
|
21
22
|
})
|
|
22
23
|
: undefined;
|
|
23
24
|
const injection = buildInjection(css, {
|
|
@@ -80,6 +81,7 @@ const pitch = function pitch() {
|
|
|
80
81
|
namespace: resolvedNamespace,
|
|
81
82
|
resourcePath: this.resourcePath,
|
|
82
83
|
emitWarning: message => emitKnightedWarning(this, message),
|
|
84
|
+
target: 'js',
|
|
83
85
|
})
|
|
84
86
|
: undefined;
|
|
85
87
|
return createCombinedModule(request, css, {
|
package/dist/cjs/loader.d.cts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { LoaderDefinitionFunction, PitchLoaderDefinitionFunction } from 'webpack';
|
|
2
2
|
import { type CssOptions } from './css.cjs';
|
|
3
|
-
|
|
3
|
+
type KnightedCssCombinedExtras = Readonly<Record<string, unknown>>;
|
|
4
|
+
export type KnightedCssCombinedModule<TModule, TExtras extends KnightedCssCombinedExtras = Record<never, never>> = TModule & TExtras & {
|
|
4
5
|
knightedCss: string;
|
|
5
6
|
};
|
|
6
7
|
export interface KnightedCssVanillaOptions {
|
package/dist/cjs/moduleGraph.cjs
CHANGED
|
@@ -197,7 +197,10 @@ function normalizeSpecifier(raw) {
|
|
|
197
197
|
if (!trimmed || trimmed.startsWith('\0')) {
|
|
198
198
|
return '';
|
|
199
199
|
}
|
|
200
|
-
const
|
|
200
|
+
const querySearchOffset = trimmed.startsWith('#') ? 1 : 0;
|
|
201
|
+
const remainder = trimmed.slice(querySearchOffset);
|
|
202
|
+
const queryMatchIndex = remainder.search(/[?#]/);
|
|
203
|
+
const queryIndex = queryMatchIndex === -1 ? -1 : querySearchOffset + queryMatchIndex;
|
|
201
204
|
const withoutQuery = queryIndex === -1 ? trimmed : trimmed.slice(0, queryIndex);
|
|
202
205
|
if (!withoutQuery) {
|
|
203
206
|
return '';
|
|
@@ -303,9 +306,7 @@ function createResolverFactory(cwd, extensions, scriptExtensions, graphOptions)
|
|
|
303
306
|
options.extensionAlias = extensionAlias;
|
|
304
307
|
}
|
|
305
308
|
const tsconfigOption = resolveResolverTsconfig(graphOptions?.tsConfig, cwd);
|
|
306
|
-
|
|
307
|
-
options.tsconfig = tsconfigOption;
|
|
308
|
-
}
|
|
309
|
+
options.tsconfig = tsconfigOption ?? 'auto';
|
|
309
310
|
return new oxc_resolver_1.ResolverFactory(options);
|
|
310
311
|
}
|
|
311
312
|
function buildExtensionAlias(scriptExtensions) {
|
|
@@ -7,20 +7,23 @@ exports.formatStableSelectorMap = formatStableSelectorMap;
|
|
|
7
7
|
const lightningcss_1 = require("lightningcss");
|
|
8
8
|
const helpers_js_1 = require("./helpers.cjs");
|
|
9
9
|
function buildStableSelectorsLiteral(options) {
|
|
10
|
+
const target = options.target ?? 'ts';
|
|
10
11
|
const trimmedNamespace = options.namespace.trim();
|
|
11
12
|
if (!trimmedNamespace) {
|
|
12
13
|
options.emitWarning(`stableSelectors requested for ${options.resourcePath} but "stableNamespace" resolved to an empty value.`);
|
|
13
|
-
return
|
|
14
|
-
literal: 'export const stableSelectors = {} as const;\n',
|
|
15
|
-
selectorMap: new Map(),
|
|
16
|
-
};
|
|
14
|
+
return finalizeLiteral(new Map(), target);
|
|
17
15
|
}
|
|
18
16
|
const selectorMap = collectStableSelectors(options.css, trimmedNamespace, options.resourcePath);
|
|
19
17
|
if (selectorMap.size === 0) {
|
|
20
18
|
options.emitWarning(`stableSelectors requested for ${options.resourcePath} but no selectors matched namespace "${trimmedNamespace}".`);
|
|
21
19
|
}
|
|
20
|
+
return finalizeLiteral(selectorMap, target);
|
|
21
|
+
}
|
|
22
|
+
function finalizeLiteral(selectorMap, target) {
|
|
23
|
+
const formatted = formatStableSelectorMap(selectorMap);
|
|
24
|
+
const suffix = target === 'ts' ? ' as const' : '';
|
|
22
25
|
return {
|
|
23
|
-
literal: `export const stableSelectors = ${
|
|
26
|
+
literal: `export const stableSelectors = ${formatted}${suffix};\n`,
|
|
24
27
|
selectorMap,
|
|
25
28
|
};
|
|
26
29
|
}
|
|
@@ -2,11 +2,13 @@ export interface StableSelectorsLiteralResult {
|
|
|
2
2
|
literal: string;
|
|
3
3
|
selectorMap: Map<string, string>;
|
|
4
4
|
}
|
|
5
|
+
type StableSelectorsLiteralTarget = 'ts' | 'js';
|
|
5
6
|
export declare function buildStableSelectorsLiteral(options: {
|
|
6
7
|
css: string;
|
|
7
8
|
namespace: string;
|
|
8
9
|
resourcePath: string;
|
|
9
10
|
emitWarning: (message: string) => void;
|
|
11
|
+
target?: StableSelectorsLiteralTarget;
|
|
10
12
|
}): StableSelectorsLiteralResult;
|
|
11
13
|
export declare function collectStableSelectors(css: string, namespace: string, filename?: string): Map<string, string>;
|
|
12
14
|
declare function collectStableSelectorsByRegex(css: string, namespace: string): Map<string, string>;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { KnightedCssCombinedModule } from './loader.js';
|
|
2
|
+
type KnightedCssCombinedExtras = Readonly<Record<string, unknown>>;
|
|
3
|
+
export declare function asKnightedCssCombinedModule<TModule, TExtras extends KnightedCssCombinedExtras = Record<never, never>>(module: unknown): KnightedCssCombinedModule<TModule, TExtras>;
|
|
4
|
+
export {};
|
package/dist/loader.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { LoaderDefinitionFunction, PitchLoaderDefinitionFunction } from 'webpack';
|
|
2
2
|
import { type CssOptions } from './css.js';
|
|
3
|
-
|
|
3
|
+
type KnightedCssCombinedExtras = Readonly<Record<string, unknown>>;
|
|
4
|
+
export type KnightedCssCombinedModule<TModule, TExtras extends KnightedCssCombinedExtras = Record<never, never>> = TModule & TExtras & {
|
|
4
5
|
knightedCss: string;
|
|
5
6
|
};
|
|
6
7
|
export interface KnightedCssVanillaOptions {
|
package/dist/loader.js
CHANGED
|
@@ -15,6 +15,7 @@ const loader = async function loader(source) {
|
|
|
15
15
|
namespace: resolvedNamespace,
|
|
16
16
|
resourcePath: this.resourcePath,
|
|
17
17
|
emitWarning: message => emitKnightedWarning(this, message),
|
|
18
|
+
target: 'js',
|
|
18
19
|
})
|
|
19
20
|
: undefined;
|
|
20
21
|
const injection = buildInjection(css, {
|
|
@@ -77,6 +78,7 @@ export const pitch = function pitch() {
|
|
|
77
78
|
namespace: resolvedNamespace,
|
|
78
79
|
resourcePath: this.resourcePath,
|
|
79
80
|
emitWarning: message => emitKnightedWarning(this, message),
|
|
81
|
+
target: 'js',
|
|
80
82
|
})
|
|
81
83
|
: undefined;
|
|
82
84
|
return createCombinedModule(request, css, {
|
package/dist/moduleGraph.js
CHANGED
|
@@ -191,7 +191,10 @@ function normalizeSpecifier(raw) {
|
|
|
191
191
|
if (!trimmed || trimmed.startsWith('\0')) {
|
|
192
192
|
return '';
|
|
193
193
|
}
|
|
194
|
-
const
|
|
194
|
+
const querySearchOffset = trimmed.startsWith('#') ? 1 : 0;
|
|
195
|
+
const remainder = trimmed.slice(querySearchOffset);
|
|
196
|
+
const queryMatchIndex = remainder.search(/[?#]/);
|
|
197
|
+
const queryIndex = queryMatchIndex === -1 ? -1 : querySearchOffset + queryMatchIndex;
|
|
195
198
|
const withoutQuery = queryIndex === -1 ? trimmed : trimmed.slice(0, queryIndex);
|
|
196
199
|
if (!withoutQuery) {
|
|
197
200
|
return '';
|
|
@@ -297,9 +300,7 @@ function createResolverFactory(cwd, extensions, scriptExtensions, graphOptions)
|
|
|
297
300
|
options.extensionAlias = extensionAlias;
|
|
298
301
|
}
|
|
299
302
|
const tsconfigOption = resolveResolverTsconfig(graphOptions?.tsConfig, cwd);
|
|
300
|
-
|
|
301
|
-
options.tsconfig = tsconfigOption;
|
|
302
|
-
}
|
|
303
|
+
options.tsconfig = tsconfigOption ?? 'auto';
|
|
303
304
|
return new ResolverFactory(options);
|
|
304
305
|
}
|
|
305
306
|
function buildExtensionAlias(scriptExtensions) {
|
|
@@ -2,11 +2,13 @@ export interface StableSelectorsLiteralResult {
|
|
|
2
2
|
literal: string;
|
|
3
3
|
selectorMap: Map<string, string>;
|
|
4
4
|
}
|
|
5
|
+
type StableSelectorsLiteralTarget = 'ts' | 'js';
|
|
5
6
|
export declare function buildStableSelectorsLiteral(options: {
|
|
6
7
|
css: string;
|
|
7
8
|
namespace: string;
|
|
8
9
|
resourcePath: string;
|
|
9
10
|
emitWarning: (message: string) => void;
|
|
11
|
+
target?: StableSelectorsLiteralTarget;
|
|
10
12
|
}): StableSelectorsLiteralResult;
|
|
11
13
|
export declare function collectStableSelectors(css: string, namespace: string, filename?: string): Map<string, string>;
|
|
12
14
|
declare function collectStableSelectorsByRegex(css: string, namespace: string): Map<string, string>;
|
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
import { transform as lightningTransform } from 'lightningcss';
|
|
2
2
|
import { escapeRegex, serializeSelector } from './helpers.js';
|
|
3
3
|
export function buildStableSelectorsLiteral(options) {
|
|
4
|
+
const target = options.target ?? 'ts';
|
|
4
5
|
const trimmedNamespace = options.namespace.trim();
|
|
5
6
|
if (!trimmedNamespace) {
|
|
6
7
|
options.emitWarning(`stableSelectors requested for ${options.resourcePath} but "stableNamespace" resolved to an empty value.`);
|
|
7
|
-
return
|
|
8
|
-
literal: 'export const stableSelectors = {} as const;\n',
|
|
9
|
-
selectorMap: new Map(),
|
|
10
|
-
};
|
|
8
|
+
return finalizeLiteral(new Map(), target);
|
|
11
9
|
}
|
|
12
10
|
const selectorMap = collectStableSelectors(options.css, trimmedNamespace, options.resourcePath);
|
|
13
11
|
if (selectorMap.size === 0) {
|
|
14
12
|
options.emitWarning(`stableSelectors requested for ${options.resourcePath} but no selectors matched namespace "${trimmedNamespace}".`);
|
|
15
13
|
}
|
|
14
|
+
return finalizeLiteral(selectorMap, target);
|
|
15
|
+
}
|
|
16
|
+
function finalizeLiteral(selectorMap, target) {
|
|
17
|
+
const formatted = formatStableSelectorMap(selectorMap);
|
|
18
|
+
const suffix = target === 'ts' ? ' as const' : '';
|
|
16
19
|
return {
|
|
17
|
-
literal: `export const stableSelectors = ${
|
|
20
|
+
literal: `export const stableSelectors = ${formatted}${suffix};\n`,
|
|
18
21
|
selectorMap,
|
|
19
22
|
};
|
|
20
23
|
}
|
package/loader-queries.d.ts
CHANGED
|
@@ -19,7 +19,12 @@ declare module '*?knighted-css&types' {
|
|
|
19
19
|
* TypeScript cannot infer the underlying module automatically, so consumers can
|
|
20
20
|
* import the default export and narrow it with `KnightedCssCombinedModule<typeof import('./file')>`.
|
|
21
21
|
*/
|
|
22
|
-
type
|
|
22
|
+
type KnightedCssCombinedExtras = Readonly<Record<string, unknown>>
|
|
23
|
+
|
|
24
|
+
type KnightedCssCombinedModule<
|
|
25
|
+
TModule,
|
|
26
|
+
TExtras extends KnightedCssCombinedExtras = Record<never, never>,
|
|
27
|
+
> = TModule & TExtras & { knightedCss: string }
|
|
23
28
|
|
|
24
29
|
declare module '*?knighted-css&combined' {
|
|
25
30
|
const combined: KnightedCssCombinedModule<Record<string, unknown>>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knighted/css",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.15",
|
|
4
4
|
"description": "A build-time utility that traverses JavaScript/TypeScript module dependency graphs to extract, compile, and optimize all imported CSS into a single, in-memory string.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/css.js",
|
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
"loader": [
|
|
11
11
|
"./dist/loader.d.ts"
|
|
12
12
|
],
|
|
13
|
+
"loader-helpers": [
|
|
14
|
+
"./dist/loader-helpers.d.ts"
|
|
15
|
+
],
|
|
13
16
|
"loader-queries": [
|
|
14
17
|
"./loader-queries.d.ts"
|
|
15
18
|
],
|
|
@@ -32,6 +35,11 @@
|
|
|
32
35
|
"import": "./dist/loader.js",
|
|
33
36
|
"require": "./dist/cjs/loader.cjs"
|
|
34
37
|
},
|
|
38
|
+
"./loader-helpers": {
|
|
39
|
+
"types": "./dist/loader-helpers.d.ts",
|
|
40
|
+
"import": "./dist/loader-helpers.js",
|
|
41
|
+
"require": "./dist/cjs/loader-helpers.cjs"
|
|
42
|
+
},
|
|
35
43
|
"./loader-queries": {
|
|
36
44
|
"types": "./loader-queries.d.ts",
|
|
37
45
|
"default": "./loader-queries.d.ts"
|