@lipemat/js-boilerplate-shared 1.0.0 → 1.0.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.
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { getPackageConfig } from './package-config.js';
|
|
2
2
|
export const SHORT_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
3
3
|
export const ALPHABET = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
|
4
|
-
const
|
|
5
|
-
let counters = [-1];
|
|
4
|
+
const GLOBAL = '__JS_BOILERPLATE_CSS_CLASSNAMES_STATE__';
|
|
6
5
|
/**
|
|
7
6
|
* Check if short CSS classes are enabled.
|
|
8
7
|
*
|
|
@@ -23,7 +22,9 @@ export function usingShortCssClasses() {
|
|
|
23
22
|
* @notice Mostly here for unit tests.
|
|
24
23
|
*/
|
|
25
24
|
export function resetCounters() {
|
|
26
|
-
|
|
25
|
+
const state = getState();
|
|
26
|
+
state.counters = [-1];
|
|
27
|
+
state.classes = {};
|
|
27
28
|
}
|
|
28
29
|
/**
|
|
29
30
|
* Get the next class in the sequence based on:
|
|
@@ -35,6 +36,7 @@ export function resetCounters() {
|
|
|
35
36
|
* @return {string}
|
|
36
37
|
*/
|
|
37
38
|
export function getNextClass() {
|
|
39
|
+
const counters = getState().counters;
|
|
38
40
|
const last = counters.length - 1;
|
|
39
41
|
let totalLetters = ALPHABET.length - 1;
|
|
40
42
|
// The first level uses the SHORT_ALPHABET.
|
|
@@ -51,6 +53,19 @@ export function getNextClass() {
|
|
|
51
53
|
return 0 === i ? SHORT_ALPHABET[counter] : ALPHABET[counter];
|
|
52
54
|
}).join('');
|
|
53
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Use a global object to store state between
|
|
58
|
+
* entries in the same execution context.
|
|
59
|
+
*
|
|
60
|
+
* Prevents conflicts when webpack is running multiple entries.
|
|
61
|
+
*/
|
|
62
|
+
function getState() {
|
|
63
|
+
const globalObject = globalThis;
|
|
64
|
+
return globalObject[GLOBAL] ||= {
|
|
65
|
+
classes: {},
|
|
66
|
+
counters: [-1],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
54
69
|
/**
|
|
55
70
|
* When we run out of characters on the current level:
|
|
56
71
|
* 1. Increment the parent level.
|
|
@@ -63,6 +78,7 @@ export function getNextClass() {
|
|
|
63
78
|
*
|
|
64
79
|
*/
|
|
65
80
|
function incrementParent() {
|
|
81
|
+
const counters = getState().counters;
|
|
66
82
|
let parent = counters.length - 2;
|
|
67
83
|
let totalLetters = ALPHABET.length - 1;
|
|
68
84
|
while (counters[parent] !== undefined) {
|
|
@@ -97,6 +113,7 @@ function incrementParent() {
|
|
|
97
113
|
* @link https://webpack.js.org/loaders/css-loader/#getlocalident
|
|
98
114
|
*/
|
|
99
115
|
export const getLocalIdent = ({ resourcePath }, _, localName) => {
|
|
116
|
+
const classes = getState().classes;
|
|
100
117
|
classes[resourcePath] ||= {};
|
|
101
118
|
classes[resourcePath][localName] ||= getNextClass();
|
|
102
119
|
return classes[resourcePath][localName];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css-classnames.js","sourceRoot":"","sources":["css-classnames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"css-classnames.js","sourceRoot":"","sources":["css-classnames.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,16 +2,21 @@ import {getPackageConfig} from './package-config.js';
|
|
|
2
2
|
import type {GetLocalIdent} from '../types/css-loader.ts';
|
|
3
3
|
import type {AtLeast} from '../types/utility.ts';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
[ className: string ]: string
|
|
5
|
+
type State = {
|
|
6
|
+
classes: {
|
|
7
|
+
[ filename: string ]: {
|
|
8
|
+
[ className: string ]: string
|
|
9
|
+
}
|
|
11
10
|
}
|
|
12
|
-
|
|
11
|
+
counters: number[]
|
|
12
|
+
};
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
type LocalIdentParams = Parameters<GetLocalIdent>;
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
export const SHORT_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
18
|
+
export const ALPHABET = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
|
19
|
+
const GLOBAL = '__JS_BOILERPLATE_CSS_CLASSNAMES_STATE__';
|
|
15
20
|
|
|
16
21
|
/**
|
|
17
22
|
* Check if short CSS classes are enabled.
|
|
@@ -34,7 +39,9 @@ export function usingShortCssClasses(): boolean {
|
|
|
34
39
|
* @notice Mostly here for unit tests.
|
|
35
40
|
*/
|
|
36
41
|
export function resetCounters(): void {
|
|
37
|
-
|
|
42
|
+
const state = getState();
|
|
43
|
+
state.counters = [ -1 ];
|
|
44
|
+
state.classes = {};
|
|
38
45
|
}
|
|
39
46
|
|
|
40
47
|
/**
|
|
@@ -47,6 +54,7 @@ export function resetCounters(): void {
|
|
|
47
54
|
* @return {string}
|
|
48
55
|
*/
|
|
49
56
|
export function getNextClass(): string {
|
|
57
|
+
const counters = getState().counters;
|
|
50
58
|
const last = counters.length - 1;
|
|
51
59
|
let totalLetters = ALPHABET.length - 1;
|
|
52
60
|
|
|
@@ -67,6 +75,22 @@ export function getNextClass(): string {
|
|
|
67
75
|
}
|
|
68
76
|
|
|
69
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Use a global object to store state between
|
|
80
|
+
* entries in the same execution context.
|
|
81
|
+
*
|
|
82
|
+
* Prevents conflicts when webpack is running multiple entries.
|
|
83
|
+
*/
|
|
84
|
+
function getState(): State {
|
|
85
|
+
const globalObject = globalThis as typeof globalThis & Record<typeof GLOBAL, State>;
|
|
86
|
+
|
|
87
|
+
return globalObject[ GLOBAL ] ||= {
|
|
88
|
+
classes: {},
|
|
89
|
+
counters: [ -1 ],
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
70
94
|
/**
|
|
71
95
|
* When we run out of characters on the current level:
|
|
72
96
|
* 1. Increment the parent level.
|
|
@@ -79,6 +103,8 @@ export function getNextClass(): string {
|
|
|
79
103
|
*
|
|
80
104
|
*/
|
|
81
105
|
function incrementParent() {
|
|
106
|
+
const counters = getState().counters;
|
|
107
|
+
|
|
82
108
|
let parent = counters.length - 2;
|
|
83
109
|
let totalLetters = ALPHABET.length - 1;
|
|
84
110
|
|
|
@@ -104,8 +130,6 @@ function incrementParent() {
|
|
|
104
130
|
counters.push( 0 );
|
|
105
131
|
}
|
|
106
132
|
|
|
107
|
-
type LocalIdentParams = Parameters<GetLocalIdent>;
|
|
108
|
-
|
|
109
133
|
/**
|
|
110
134
|
* Return a single character unique CSS class name based on WebPack
|
|
111
135
|
* css-loader's `getLocalIdentName` callback.
|
|
@@ -118,6 +142,8 @@ type LocalIdentParams = Parameters<GetLocalIdent>;
|
|
|
118
142
|
* @link https://webpack.js.org/loaders/css-loader/#getlocalident
|
|
119
143
|
*/
|
|
120
144
|
export const getLocalIdent = ( {resourcePath}: AtLeast<LocalIdentParams[0], 'resourcePath'>, _: LocalIdentParams[1], localName: LocalIdentParams[2] ): ReturnType<GetLocalIdent> => {
|
|
145
|
+
const classes = getState().classes;
|
|
146
|
+
|
|
121
147
|
classes[ resourcePath ] ||= {};
|
|
122
148
|
classes[ resourcePath ][ localName ] ||= getNextClass();
|
|
123
149
|
return classes[ resourcePath ][ localName ];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-config.js","sourceRoot":"","sources":["package-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;AAEnD,SAAS,YAAY,CAAK,QAAgB;IACzC,OAAO,IAAI,CAAC,KAAK,CAAE,YAAY,CAAE,QAAQ,EAAE,MAAM,CAAE,CAAO,CAAC;AAC5D,CAAC;AAsDD,MAAM,gBAAgB,GAAG,YAAY,CAAE,OAAO,CAAC,GAAG,EAAE,CAAE,CAAC;AACvD,MAAM,QAAQ,GAA2B;IACxC,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,aAAa;IACzB,MAAM,EAAE,MAAM;IACd,eAAe,EAAE,WAAW;IAC5B,gBAAgB,EAAE,gBAAgB;IAClC,SAAS,EAAE,CAAE,MAAM,EAAE,gBAAgB,CAAE;IACvC,QAAQ,EAAE,CAAE,GAAG,CAAE;IACjB,eAAe,EAAE,IAAI;IACrB,UAAU,EAAE,IAAI;IAChB,GAAG,EAAE,kBAAkB;CACvB,CAAC;AAEF,IAAI,aAAa,GAAkB,YAAY,CAAiB,OAAO,CAAE,gBAAgB,EAAE,cAAc,CAAE,CAAE,CAAC;AAC9G,aAAa,GAAG,EAAC,GAAG,QAAQ,EAAE,GAAG,aAAa,EAAC,CAAC;AAChD,aAAa,CAAC,gBAAgB,GAAG,aAAa,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAE,aAAa,CAAC,MAAM,CAAE,CAAC,OAAO,CAAE,KAAK,EAAE,GAAG,CAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAExI,IAAI,CAAC;IACJ,MAAM,WAAW,GAAG,YAAY,CAA0B,OAAO,CAAE,gBAAgB,EAAE,qBAAqB,CAAE,CAAE,CAAC;IAC/G,aAAa,GAAG,EAAC,GAAG,aAAa,EAAE,GAAG,WAAW,EAAC,CAAC;AACpD,CAAC;AAAC,MAAM,CAAC;AACT,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB;IAC/B,OAAO,EAAC,GAAG,aAAa,EAAE,GAAG,aAAa,EAAC,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,IAAI,aAAa,GAA2B,EAAE,CAAC;AAE/C,MAAM,UAAU,mBAAmB,CAAE,SAAiC;IACrE,aAAa,GAAG,SAAS,CAAC;AAC3B,CAAC;
|
|
1
|
+
{"version":3,"file":"package-config.js","sourceRoot":"","sources":["package-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;AAEnD,SAAS,YAAY,CAAK,QAAgB;IACzC,OAAO,IAAI,CAAC,KAAK,CAAE,YAAY,CAAE,QAAQ,EAAE,MAAM,CAAE,CAAO,CAAC;AAC5D,CAAC;AAsDD,MAAM,gBAAgB,GAAG,YAAY,CAAE,OAAO,CAAC,GAAG,EAAE,CAAE,CAAC;AACvD,MAAM,QAAQ,GAA2B;IACxC,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,aAAa;IACzB,YAAY,EAAE,EAAE;IAChB,eAAe,EAAE,EAAE;IACnB,MAAM,EAAE,MAAM;IACd,eAAe,EAAE,WAAW;IAC5B,gBAAgB,EAAE,gBAAgB;IAClC,SAAS,EAAE,CAAE,MAAM,EAAE,gBAAgB,CAAE;IACvC,QAAQ,EAAE,CAAE,GAAG,CAAE;IACjB,eAAe,EAAE,IAAI;IACrB,UAAU,EAAE,IAAI;IAChB,GAAG,EAAE,kBAAkB;CACvB,CAAC;AAEF,IAAI,aAAa,GAAkB,YAAY,CAAiB,OAAO,CAAE,gBAAgB,EAAE,cAAc,CAAE,CAAE,CAAC;AAC9G,aAAa,GAAG,EAAC,GAAG,QAAQ,EAAE,GAAG,aAAa,EAAC,CAAC;AAChD,aAAa,CAAC,gBAAgB,GAAG,aAAa,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAE,aAAa,CAAC,MAAM,CAAE,CAAC,OAAO,CAAE,KAAK,EAAE,GAAG,CAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAExI,IAAI,CAAC;IACJ,MAAM,WAAW,GAAG,YAAY,CAA0B,OAAO,CAAE,gBAAgB,EAAE,qBAAqB,CAAE,CAAE,CAAC;IAC/G,aAAa,GAAG,EAAC,GAAG,aAAa,EAAE,GAAG,WAAW,EAAC,CAAC;AACpD,CAAC;AAAC,MAAM,CAAC;AACT,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB;IAC/B,OAAO,EAAC,GAAG,aAAa,EAAE,GAAG,aAAa,EAAC,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,IAAI,aAAa,GAA2B,EAAE,CAAC;AAE/C,MAAM,UAAU,mBAAmB,CAAE,SAAiC;IACrE,aAAa,GAAG,SAAS,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,kBAAkB;IACjC,aAAa,GAAG,EAAE,CAAC;AACpB,CAAC"}
|
|
@@ -63,6 +63,8 @@ const defaults: Partial<PackageConfig> = {
|
|
|
63
63
|
cssEnums: true,
|
|
64
64
|
cssTsFiles: true,
|
|
65
65
|
css_folder: './css/dist/',
|
|
66
|
+
dependencies: {},
|
|
67
|
+
devDependencies: {},
|
|
66
68
|
jsPath: './js',
|
|
67
69
|
mainCssFileName: 'front-end',
|
|
68
70
|
packageDirectory: workingDirectory,
|
|
@@ -103,6 +105,7 @@ let modifications: Partial<PackageConfig> = {};
|
|
|
103
105
|
export function modifyPackageConfig( additions: Partial<PackageConfig> ): void {
|
|
104
106
|
modifications = additions;
|
|
105
107
|
}
|
|
108
|
+
|
|
106
109
|
export function resetPackageConfig(): void {
|
|
107
110
|
modifications = {};
|
|
108
111
|
}
|