@buoy-design/scanners 0.1.5 → 0.1.7
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/LICENSE +21 -0
- package/README.md +37 -0
- package/dist/base/index.d.ts +1 -0
- package/dist/base/index.d.ts.map +1 -1
- package/dist/base/index.js +1 -0
- package/dist/base/index.js.map +1 -1
- package/dist/base/signal-aware-scanner.d.ts +44 -0
- package/dist/base/signal-aware-scanner.d.ts.map +1 -0
- package/dist/base/signal-aware-scanner.js +64 -0
- package/dist/base/signal-aware-scanner.js.map +1 -0
- package/dist/cache/index.d.ts +2 -0
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +1 -0
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/with-cache.d.ts +82 -0
- package/dist/cache/with-cache.d.ts.map +1 -0
- package/dist/cache/with-cache.js +97 -0
- package/dist/cache/with-cache.js.map +1 -0
- package/dist/extractors/index.d.ts.map +1 -1
- package/dist/extractors/index.js +43 -3
- package/dist/extractors/index.js.map +1 -1
- package/dist/git/angular-scanner.d.ts +2 -25
- package/dist/git/angular-scanner.d.ts.map +1 -1
- package/dist/git/angular-scanner.js +8 -75
- package/dist/git/angular-scanner.js.map +1 -1
- package/dist/git/react-scanner.d.ts +2 -20
- package/dist/git/react-scanner.d.ts.map +1 -1
- package/dist/git/react-scanner.js +4 -39
- package/dist/git/react-scanner.js.map +1 -1
- package/dist/git/svelte-scanner.d.ts +2 -25
- package/dist/git/svelte-scanner.d.ts.map +1 -1
- package/dist/git/svelte-scanner.js +8 -75
- package/dist/git/svelte-scanner.js.map +1 -1
- package/dist/git/template-scanner.d.ts +2 -20
- package/dist/git/template-scanner.d.ts.map +1 -1
- package/dist/git/template-scanner.js +5 -40
- package/dist/git/template-scanner.js.map +1 -1
- package/dist/git/vue-scanner.d.ts +2 -25
- package/dist/git/vue-scanner.d.ts.map +1 -1
- package/dist/git/vue-scanner.js +8 -75
- package/dist/git/vue-scanner.js.map +1 -1
- package/dist/git/webcomponent-scanner.d.ts +2 -20
- package/dist/git/webcomponent-scanner.d.ts.map +1 -1
- package/dist/git/webcomponent-scanner.js +4 -39
- package/dist/git/webcomponent-scanner.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/patterns/hardcoded-values.d.ts +76 -0
- package/dist/patterns/hardcoded-values.d.ts.map +1 -0
- package/dist/patterns/hardcoded-values.js +225 -0
- package/dist/patterns/hardcoded-values.js.map +1 -0
- package/dist/patterns/index.d.ts +2 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +2 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/signals/types.d.ts +32 -32
- package/package.json +12 -12
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Buoy
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# @buoy-design/scanners
|
|
2
|
+
|
|
3
|
+
Framework-specific code scanners for Buoy. Extracts components and design tokens from React, Vue, Svelte, Angular, and more.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @buoy-design/scanners
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Supported Frameworks
|
|
12
|
+
|
|
13
|
+
- **React** - JSX/TSX components
|
|
14
|
+
- **Vue** - Single File Components
|
|
15
|
+
- **Svelte** - .svelte files
|
|
16
|
+
- **Angular** - @Component decorators
|
|
17
|
+
- **Web Components** - Lit, Stencil
|
|
18
|
+
- **Tailwind** - Config parsing, arbitrary value detection
|
|
19
|
+
- **Templates** - Blade, ERB, Twig
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { createReactScanner } from '@buoy-design/scanners';
|
|
25
|
+
|
|
26
|
+
const scanner = createReactScanner({
|
|
27
|
+
include: ['src/**/*.tsx'],
|
|
28
|
+
exclude: ['**/*.test.*'],
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const components = await scanner.scan();
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Links
|
|
35
|
+
|
|
36
|
+
- [Buoy CLI](https://www.npmjs.com/package/@buoy-design/cli)
|
|
37
|
+
- [Documentation](https://buoy.design/docs)
|
package/dist/base/index.d.ts
CHANGED
package/dist/base/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC"}
|
package/dist/base/index.js
CHANGED
package/dist/base/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Scanner, ScannerConfig } from "./scanner.js";
|
|
2
|
+
import { type SignalAggregator, type RawSignal } from "../signals/index.js";
|
|
3
|
+
import type { CollectorStats, SignalEnrichedScanResult } from "../signals/scanner-integration.js";
|
|
4
|
+
import type { SignalEmitter } from "../signals/emitter.js";
|
|
5
|
+
/**
|
|
6
|
+
* Base scanner class with built-in signal collection support.
|
|
7
|
+
* Extends the base Scanner with methods for collecting and aggregating
|
|
8
|
+
* signals during scanning operations.
|
|
9
|
+
*
|
|
10
|
+
* Scanners that need signal collection should extend this class instead
|
|
11
|
+
* of the base Scanner class.
|
|
12
|
+
*/
|
|
13
|
+
export declare abstract class SignalAwareScanner<T, C extends ScannerConfig = ScannerConfig> extends Scanner<T, C> {
|
|
14
|
+
/** Aggregator for collecting signals across all scanned files */
|
|
15
|
+
protected signalAggregator: SignalAggregator;
|
|
16
|
+
/**
|
|
17
|
+
* Clear signals before starting a new scan.
|
|
18
|
+
* Call this at the start of scan() to reset state.
|
|
19
|
+
*/
|
|
20
|
+
protected clearSignals(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Add signals from a file's emitter to the aggregator.
|
|
23
|
+
* Call this at the end of parseFile() to collect the file's signals.
|
|
24
|
+
*
|
|
25
|
+
* @param filePath The relative file path (used as key)
|
|
26
|
+
* @param emitter The signal emitter from the file's collector
|
|
27
|
+
*/
|
|
28
|
+
protected addSignals(filePath: string, emitter: SignalEmitter): void;
|
|
29
|
+
/**
|
|
30
|
+
* Scan and return signals along with items.
|
|
31
|
+
* This is the signal-enriched version of scan().
|
|
32
|
+
*/
|
|
33
|
+
scanWithSignals(): Promise<SignalEnrichedScanResult<T>>;
|
|
34
|
+
/**
|
|
35
|
+
* Get signals collected during the last scan.
|
|
36
|
+
* Call after scan() to retrieve signals.
|
|
37
|
+
*/
|
|
38
|
+
getCollectedSignals(): RawSignal[];
|
|
39
|
+
/**
|
|
40
|
+
* Get signal statistics from the last scan.
|
|
41
|
+
*/
|
|
42
|
+
getSignalStats(): CollectorStats;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=signal-aware-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-aware-scanner.d.ts","sourceRoot":"","sources":["../../src/base/signal-aware-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;;;;;;GAOG;AACH,8BAAsB,kBAAkB,CACtC,CAAC,EACD,CAAC,SAAS,aAAa,GAAG,aAAa,CACvC,SAAQ,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,iEAAiE;IACjE,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAA4B;IAExE;;;OAGG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IAI9B;;;;;;OAMG;IACH,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAIpE;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;IAY7D;;;OAGG;IACH,mBAAmB,IAAI,SAAS,EAAE;IAIlC;;OAEG;IACH,cAAc,IAAI,cAAc;CAOjC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Scanner } from "./scanner.js";
|
|
2
|
+
import { createSignalAggregator, } from "../signals/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Base scanner class with built-in signal collection support.
|
|
5
|
+
* Extends the base Scanner with methods for collecting and aggregating
|
|
6
|
+
* signals during scanning operations.
|
|
7
|
+
*
|
|
8
|
+
* Scanners that need signal collection should extend this class instead
|
|
9
|
+
* of the base Scanner class.
|
|
10
|
+
*/
|
|
11
|
+
export class SignalAwareScanner extends Scanner {
|
|
12
|
+
/** Aggregator for collecting signals across all scanned files */
|
|
13
|
+
signalAggregator = createSignalAggregator();
|
|
14
|
+
/**
|
|
15
|
+
* Clear signals before starting a new scan.
|
|
16
|
+
* Call this at the start of scan() to reset state.
|
|
17
|
+
*/
|
|
18
|
+
clearSignals() {
|
|
19
|
+
this.signalAggregator.clear();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Add signals from a file's emitter to the aggregator.
|
|
23
|
+
* Call this at the end of parseFile() to collect the file's signals.
|
|
24
|
+
*
|
|
25
|
+
* @param filePath The relative file path (used as key)
|
|
26
|
+
* @param emitter The signal emitter from the file's collector
|
|
27
|
+
*/
|
|
28
|
+
addSignals(filePath, emitter) {
|
|
29
|
+
this.signalAggregator.addEmitter(filePath, emitter);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Scan and return signals along with items.
|
|
33
|
+
* This is the signal-enriched version of scan().
|
|
34
|
+
*/
|
|
35
|
+
async scanWithSignals() {
|
|
36
|
+
const result = await this.scan();
|
|
37
|
+
return {
|
|
38
|
+
...result,
|
|
39
|
+
signals: this.signalAggregator.getAllSignals(),
|
|
40
|
+
signalStats: {
|
|
41
|
+
total: this.signalAggregator.getStats().total,
|
|
42
|
+
byType: this.signalAggregator.getStats().byType,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get signals collected during the last scan.
|
|
48
|
+
* Call after scan() to retrieve signals.
|
|
49
|
+
*/
|
|
50
|
+
getCollectedSignals() {
|
|
51
|
+
return this.signalAggregator.getAllSignals();
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get signal statistics from the last scan.
|
|
55
|
+
*/
|
|
56
|
+
getSignalStats() {
|
|
57
|
+
const stats = this.signalAggregator.getStats();
|
|
58
|
+
return {
|
|
59
|
+
total: stats.total,
|
|
60
|
+
byType: stats.byType,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=signal-aware-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-aware-scanner.js","sourceRoot":"","sources":["../../src/base/signal-aware-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,sBAAsB,GAGvB,MAAM,qBAAqB,CAAC;AAI7B;;;;;;;GAOG;AACH,MAAM,OAAgB,kBAGpB,SAAQ,OAAa;IACrB,iEAAiE;IACvD,gBAAgB,GAAqB,sBAAsB,EAAE,CAAC;IAExE;;;OAGG;IACO,YAAY;QACpB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAED;;;;;;OAMG;IACO,UAAU,CAAC,QAAgB,EAAE,OAAsB;QAC3D,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACjC,OAAO;YACL,GAAG,MAAM;YACT,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE;YAC9C,WAAW,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK;gBAC7C,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,MAAM;aAChD;SACF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;QAC/C,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC;IACJ,CAAC;CACF"}
|
package/dist/cache/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { ScanCache } from "./scan-cache.js";
|
|
2
|
+
export { withCache, withOptionalCache } from "./with-cache.js";
|
|
3
|
+
export type { WithCacheOptions, WithCacheResult } from "./with-cache.js";
|
|
2
4
|
export * from "./types.js";
|
|
3
5
|
export * from "./git-utils.js";
|
|
4
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC/D,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACzE,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
|
package/dist/cache/index.js
CHANGED
package/dist/cache/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE/D,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RAII-style cache wrapper for guaranteed resource cleanup.
|
|
3
|
+
*
|
|
4
|
+
* Ensures cache is properly loaded before use and saved after use,
|
|
5
|
+
* even when errors occur during the callback execution.
|
|
6
|
+
*/
|
|
7
|
+
import { ScanCache } from "./scan-cache.js";
|
|
8
|
+
/**
|
|
9
|
+
* Options for the withCache wrapper
|
|
10
|
+
*/
|
|
11
|
+
export interface WithCacheOptions {
|
|
12
|
+
/** Clear cache before use */
|
|
13
|
+
clearCache?: boolean;
|
|
14
|
+
/** Save cache even if callback throws (default: false) */
|
|
15
|
+
saveOnError?: boolean;
|
|
16
|
+
/** Callback for verbose logging */
|
|
17
|
+
onVerbose?: (message: string) => void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Result from withCache including cache statistics
|
|
21
|
+
*/
|
|
22
|
+
export interface WithCacheResult<T> {
|
|
23
|
+
/** The result from the callback */
|
|
24
|
+
result: T;
|
|
25
|
+
/** Cache statistics after operation */
|
|
26
|
+
stats: {
|
|
27
|
+
entryCount: number;
|
|
28
|
+
totalSize: number;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Execute a callback with a properly managed cache instance.
|
|
33
|
+
*
|
|
34
|
+
* This wrapper ensures:
|
|
35
|
+
* - Cache is loaded before the callback executes
|
|
36
|
+
* - Cache is saved after successful completion
|
|
37
|
+
* - Cache state is consistent even if errors occur
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* // Simple usage
|
|
42
|
+
* const { result } = await withCache(projectRoot, async (cache) => {
|
|
43
|
+
* const orchestrator = new ScanOrchestrator(config, projectRoot, { cache });
|
|
44
|
+
* return orchestrator.scan(['react']);
|
|
45
|
+
* });
|
|
46
|
+
*
|
|
47
|
+
* // With options
|
|
48
|
+
* const { result, stats } = await withCache(
|
|
49
|
+
* projectRoot,
|
|
50
|
+
* async (cache) => doScanning(cache),
|
|
51
|
+
* { clearCache: true, onVerbose: console.log }
|
|
52
|
+
* );
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare function withCache<T>(projectRoot: string, callback: (cache: ScanCache) => Promise<T>, options?: WithCacheOptions): Promise<WithCacheResult<T>>;
|
|
56
|
+
/**
|
|
57
|
+
* Execute a callback with an optional cache instance.
|
|
58
|
+
*
|
|
59
|
+
* If caching is disabled (enabled=false), the callback receives undefined
|
|
60
|
+
* and no cache operations are performed.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* const result = await withOptionalCache(
|
|
65
|
+
* projectRoot,
|
|
66
|
+
* options.cache !== false, // enabled based on CLI flag
|
|
67
|
+
* async (cache) => {
|
|
68
|
+
* const orchestrator = new ScanOrchestrator(config, projectRoot, { cache });
|
|
69
|
+
* return orchestrator.scan(['react']);
|
|
70
|
+
* },
|
|
71
|
+
* { clearCache: options.clearCache }
|
|
72
|
+
* );
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export declare function withOptionalCache<T>(projectRoot: string, enabled: boolean, callback: (cache: ScanCache | undefined) => Promise<T>, options?: WithCacheOptions): Promise<{
|
|
76
|
+
result: T;
|
|
77
|
+
stats?: {
|
|
78
|
+
entryCount: number;
|
|
79
|
+
totalSize: number;
|
|
80
|
+
};
|
|
81
|
+
}>;
|
|
82
|
+
//# sourceMappingURL=with-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-cache.d.ts","sourceRoot":"","sources":["../../src/cache/with-cache.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mCAAmC;IACnC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,mCAAmC;IACnC,MAAM,EAAE,CAAC,CAAC;IACV,uCAAuC;IACvC,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1C,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CA4C7B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,EACtD,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAO3E"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// packages/scanners/src/cache/with-cache.ts
|
|
2
|
+
/**
|
|
3
|
+
* RAII-style cache wrapper for guaranteed resource cleanup.
|
|
4
|
+
*
|
|
5
|
+
* Ensures cache is properly loaded before use and saved after use,
|
|
6
|
+
* even when errors occur during the callback execution.
|
|
7
|
+
*/
|
|
8
|
+
import { ScanCache } from "./scan-cache.js";
|
|
9
|
+
/**
|
|
10
|
+
* Execute a callback with a properly managed cache instance.
|
|
11
|
+
*
|
|
12
|
+
* This wrapper ensures:
|
|
13
|
+
* - Cache is loaded before the callback executes
|
|
14
|
+
* - Cache is saved after successful completion
|
|
15
|
+
* - Cache state is consistent even if errors occur
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* // Simple usage
|
|
20
|
+
* const { result } = await withCache(projectRoot, async (cache) => {
|
|
21
|
+
* const orchestrator = new ScanOrchestrator(config, projectRoot, { cache });
|
|
22
|
+
* return orchestrator.scan(['react']);
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // With options
|
|
26
|
+
* const { result, stats } = await withCache(
|
|
27
|
+
* projectRoot,
|
|
28
|
+
* async (cache) => doScanning(cache),
|
|
29
|
+
* { clearCache: true, onVerbose: console.log }
|
|
30
|
+
* );
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export async function withCache(projectRoot, callback, options = {}) {
|
|
34
|
+
const { clearCache = false, saveOnError = false, onVerbose } = options;
|
|
35
|
+
const cache = new ScanCache(projectRoot);
|
|
36
|
+
// Load existing cache data
|
|
37
|
+
await cache.load();
|
|
38
|
+
// Clear if requested
|
|
39
|
+
if (clearCache) {
|
|
40
|
+
cache.clear();
|
|
41
|
+
onVerbose?.("Cache cleared");
|
|
42
|
+
}
|
|
43
|
+
let result;
|
|
44
|
+
let error;
|
|
45
|
+
try {
|
|
46
|
+
result = await callback(cache);
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
error = e instanceof Error ? e : new Error(String(e));
|
|
50
|
+
if (saveOnError) {
|
|
51
|
+
// Save partial progress even on error
|
|
52
|
+
try {
|
|
53
|
+
await cache.save();
|
|
54
|
+
onVerbose?.("Cache saved (partial progress after error)");
|
|
55
|
+
}
|
|
56
|
+
catch (saveError) {
|
|
57
|
+
// Log but don't mask the original error
|
|
58
|
+
onVerbose?.(`Failed to save cache after error: ${saveError}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
throw error;
|
|
62
|
+
}
|
|
63
|
+
// Save cache on success
|
|
64
|
+
await cache.save();
|
|
65
|
+
onVerbose?.("Cache saved");
|
|
66
|
+
return {
|
|
67
|
+
result,
|
|
68
|
+
stats: cache.getStats(),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Execute a callback with an optional cache instance.
|
|
73
|
+
*
|
|
74
|
+
* If caching is disabled (enabled=false), the callback receives undefined
|
|
75
|
+
* and no cache operations are performed.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* const result = await withOptionalCache(
|
|
80
|
+
* projectRoot,
|
|
81
|
+
* options.cache !== false, // enabled based on CLI flag
|
|
82
|
+
* async (cache) => {
|
|
83
|
+
* const orchestrator = new ScanOrchestrator(config, projectRoot, { cache });
|
|
84
|
+
* return orchestrator.scan(['react']);
|
|
85
|
+
* },
|
|
86
|
+
* { clearCache: options.clearCache }
|
|
87
|
+
* );
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export async function withOptionalCache(projectRoot, enabled, callback, options = {}) {
|
|
91
|
+
if (!enabled) {
|
|
92
|
+
const result = await callback(undefined);
|
|
93
|
+
return { result };
|
|
94
|
+
}
|
|
95
|
+
return withCache(projectRoot, callback, options);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=with-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-cache.js","sourceRoot":"","sources":["../../src/cache/with-cache.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA2B5C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,WAAmB,EACnB,QAA0C,EAC1C,UAA4B,EAAE;IAE9B,MAAM,EAAE,UAAU,GAAG,KAAK,EAAE,WAAW,GAAG,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAEvE,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC;IAEzC,2BAA2B;IAC3B,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IAEnB,qBAAqB;IACrB,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,SAAS,EAAE,CAAC,eAAe,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,MAAS,CAAC;IACd,IAAI,KAAwB,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtD,IAAI,WAAW,EAAE,CAAC;YAChB,sCAAsC;YACtC,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,SAAS,EAAE,CAAC,4CAA4C,CAAC,CAAC;YAC5D,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACnB,wCAAwC;gBACxC,SAAS,EAAE,CAAC,qCAAqC,SAAS,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;IAED,wBAAwB;IACxB,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IACnB,SAAS,EAAE,CAAC,aAAa,CAAC,CAAC;IAE3B,OAAO;QACL,MAAM;QACN,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;KACxB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,OAAgB,EAChB,QAAsD,EACtD,UAA4B,EAAE;IAE9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;IAED,OAAO,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkDxE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9E;;GAEG;AACH,MAAM,MAAM,YAAY,GAEpB,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,UAAU,GAChF,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAC7E,YAAY,GAAG,aAAa,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAE5E,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAC7E,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAEtC,KAAK,GAAG,QAAQ,GAEhB,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAE1C,UAAU,GAAG,KAAK,GAAG,UAAU,GAE/B,KAAK,GAEL,eAAe,GAAG,eAAe,GAEjC,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAErC;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,YAAY,CA2BxE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,UAAU,EAAE,CAqCvF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAOlE;AAGD,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC5I,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC1B,4BAA4B,EAC5B,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,EAC3B,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACtB,MAAM,oBAAoB,CAAC"}
|
package/dist/extractors/index.js
CHANGED
|
@@ -5,6 +5,45 @@
|
|
|
5
5
|
import { extractAllHtmlStyles } from './html-style.js';
|
|
6
6
|
import { extractJsxStyleObjects } from './jsx-style.js';
|
|
7
7
|
import { extractDirectiveStyles, extractAngularStyleBindings, extractVueStyleBindings } from './directive-style.js';
|
|
8
|
+
/**
|
|
9
|
+
* Extract Svelte style directives (style:prop={value} and style:prop="value")
|
|
10
|
+
* Examples:
|
|
11
|
+
* <div style:color="red">
|
|
12
|
+
* <div style:padding={padding}>
|
|
13
|
+
* <div style:background-color="#fff">
|
|
14
|
+
*/
|
|
15
|
+
function extractSvelteStyleDirectives(content) {
|
|
16
|
+
const matches = [];
|
|
17
|
+
// Match style:property="value" or style:property={value}
|
|
18
|
+
// Handles kebab-case properties like style:background-color
|
|
19
|
+
const styleDirectiveRegex = /style:([a-z-]+)=(?:{([^}]+)}|"([^"]+)"|'([^']+)')/g;
|
|
20
|
+
let match;
|
|
21
|
+
while ((match = styleDirectiveRegex.exec(content)) !== null) {
|
|
22
|
+
const property = match[1];
|
|
23
|
+
// Value can be in curly braces {value}, double quotes "value", or single quotes 'value'
|
|
24
|
+
const value = match[2] || match[3] || match[4];
|
|
25
|
+
if (!property || !value)
|
|
26
|
+
continue;
|
|
27
|
+
// Skip dynamic expressions in curly braces that are likely variables
|
|
28
|
+
if (match[2] && /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(value.trim())) {
|
|
29
|
+
// This is a variable reference, skip it
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
// Calculate line and column
|
|
33
|
+
const beforeMatch = content.slice(0, match.index);
|
|
34
|
+
const lines = beforeMatch.split('\n');
|
|
35
|
+
const line = lines.length;
|
|
36
|
+
const lastLine = lines[lines.length - 1] || '';
|
|
37
|
+
const column = lastLine.length + 1;
|
|
38
|
+
matches.push({
|
|
39
|
+
css: `${property}: ${value.trim()}`,
|
|
40
|
+
line,
|
|
41
|
+
column,
|
|
42
|
+
context: 'inline',
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return matches;
|
|
46
|
+
}
|
|
8
47
|
/**
|
|
9
48
|
* Determine the syntax family for a template type
|
|
10
49
|
*/
|
|
@@ -59,9 +98,10 @@ export function extractStyles(content, templateType) {
|
|
|
59
98
|
];
|
|
60
99
|
case 'svelte':
|
|
61
100
|
// Svelte has style:prop and plain style
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
101
|
+
return [
|
|
102
|
+
...extractSvelteStyleDirectives(content),
|
|
103
|
+
...extractAllHtmlStyles(content),
|
|
104
|
+
];
|
|
65
105
|
case 'html-like':
|
|
66
106
|
default:
|
|
67
107
|
return extractAllHtmlStyles(content);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAmB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,34 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SignalAwareScanner, ScanResult, ScannerConfig } from "../base/index.js";
|
|
2
2
|
import type { Component } from "@buoy-design/core";
|
|
3
|
-
import { type SignalEnrichedScanResult, type CollectorStats } from "../signals/scanner-integration.js";
|
|
4
|
-
import { type RawSignal } from "../signals/index.js";
|
|
5
3
|
export interface AngularScannerConfig extends ScannerConfig {
|
|
6
4
|
designSystemPackage?: string;
|
|
7
5
|
}
|
|
8
|
-
export declare class AngularComponentScanner extends
|
|
6
|
+
export declare class AngularComponentScanner extends SignalAwareScanner<Component, AngularScannerConfig> {
|
|
9
7
|
/**
|
|
10
8
|
* Default file patterns for Angular components.
|
|
11
9
|
* Includes both standard *.component.ts and any *.ts files to catch
|
|
12
10
|
* Angular Material-style naming (e.g., button.ts, tab.ts)
|
|
13
11
|
*/
|
|
14
12
|
private static readonly DEFAULT_PATTERNS;
|
|
15
|
-
/** Aggregator for collecting signals across all scanned files */
|
|
16
|
-
private signalAggregator;
|
|
17
13
|
scan(): Promise<ScanResult<Component>>;
|
|
18
|
-
/**
|
|
19
|
-
* Scan and return signals along with components.
|
|
20
|
-
* This is the signal-enriched version of scan().
|
|
21
|
-
*/
|
|
22
|
-
scanWithSignals(): Promise<SignalEnrichedScanResult<Component>>;
|
|
23
|
-
/**
|
|
24
|
-
* Get signals collected during the last scan.
|
|
25
|
-
* Call after scan() to retrieve signals.
|
|
26
|
-
*/
|
|
27
|
-
getCollectedSignals(): RawSignal[];
|
|
28
|
-
/**
|
|
29
|
-
* Get signal statistics from the last scan.
|
|
30
|
-
*/
|
|
31
|
-
getSignalStats(): CollectorStats;
|
|
32
14
|
getSourceType(): string;
|
|
33
15
|
private parseFile;
|
|
34
16
|
/**
|
|
@@ -102,10 +84,5 @@ export declare class AngularComponentScanner extends Scanner<Component, AngularS
|
|
|
102
84
|
* - [ngStyle]="{ 'background-color': '#FF0000' }"
|
|
103
85
|
*/
|
|
104
86
|
private extractHardcodedValuesFromTemplate;
|
|
105
|
-
/**
|
|
106
|
-
* Determine if a CSS value is hardcoded and what type it is.
|
|
107
|
-
* Returns null if the value is a design token or variable.
|
|
108
|
-
*/
|
|
109
|
-
private getHardcodedValueType;
|
|
110
87
|
}
|
|
111
88
|
//# sourceMappingURL=angular-scanner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-scanner.d.ts","sourceRoot":"","sources":["../../src/git/angular-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"angular-scanner.d.ts","sourceRoot":"","sources":["../../src/git/angular-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAkC,MAAM,mBAAmB,CAAC;AAgBnF,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAYD,qBAAa,uBAAwB,SAAQ,kBAAkB,CAC7D,SAAS,EACT,oBAAoB,CACrB;IACC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAe;IAEjD,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAkB5C,aAAa,IAAI,MAAM;YAIT,SAAS;IAiDvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,gBAAgB;IAoFxB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAwCxB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAyEtC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAsFvC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA8C7B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA2DpC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,aAAa;IAgPrB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAsCjC;;;OAGG;IACH,OAAO,CAAC,+BAA+B;IA4BvC,OAAO,CAAC,cAAc;IAqEtB;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAkBnC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+D3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2D5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiC1B,OAAO,CAAC,sBAAsB;IAK9B;;;;;;OAMG;IACH,OAAO,CAAC,kCAAkC;CAyH3C"}
|