@css-modules-kit/codegen 0.5.0 → 0.7.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.
package/README.md CHANGED
@@ -41,6 +41,7 @@ Options:
41
41
  --project, -p The path to its configuration file, or to a folder with a 'tsconfig.json'.
42
42
  --pretty Enable color and formatting in output to make errors easier to read.
43
43
  --clean Remove the output directory before generating files. [default: false]
44
+ --watch, -w Watch for changes and regenerate files. [default: false]
44
45
  ```
45
46
 
46
47
  ## Configuration
package/bin/cmk.mjs CHANGED
@@ -1,8 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  /* eslint-disable n/no-process-exit */
3
3
 
4
- import { SystemError } from '@css-modules-kit/core';
5
- import { createLogger, parseCLIArgs, printHelpText, printVersion, runCMK, shouldBePretty } from '../dist/index.js';
4
+ import {
5
+ createLogger,
6
+ parseCLIArgs,
7
+ printHelpText,
8
+ printVersion,
9
+ runCMK,
10
+ runCMKInWatchMode,
11
+ shouldBePretty,
12
+ } from '../dist/index.js';
6
13
 
7
14
  const cwd = process.cwd();
8
15
  let logger = createLogger(cwd, shouldBePretty(undefined));
@@ -19,11 +26,19 @@ try {
19
26
  process.exit(0);
20
27
  }
21
28
 
22
- await runCMK(args.project, args.clean, logger);
23
- } catch (e) {
24
- if (e instanceof SystemError) {
25
- logger.logSystemError(e);
26
- process.exit(1);
29
+ // Normal mode and watch mode behave differently when errors occur.
30
+ // - Normal mode: Outputs errors to the terminal and exits the process with exit code 1.
31
+ // - Watch mode: Outputs errors to the terminal but does not terminate the process. Continues watching the file.
32
+ if (args.watch) {
33
+ const watcher = await runCMKInWatchMode(args, logger);
34
+ process.on('SIGINT', () => watcher.close());
35
+ } else {
36
+ const success = await runCMK(args, logger);
37
+ if (!success) {
38
+ process.exit(1);
39
+ }
27
40
  }
28
- throw e;
41
+ } catch (e) {
42
+ logger.logError(e);
43
+ process.exit(1);
29
44
  }
package/dist/cli.d.ts CHANGED
@@ -6,6 +6,7 @@ export interface ParsedArgs {
6
6
  project: string;
7
7
  pretty: boolean | undefined;
8
8
  clean: boolean;
9
+ watch: boolean;
9
10
  }
10
11
  /**
11
12
  * Parse command-line arguments.
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAgBA,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAuBpE"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAiBA,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAyBpE"}
package/dist/cli.js CHANGED
@@ -19,6 +19,7 @@ Options:
19
19
  --project, -p The path to its configuration file, or to a folder with a 'tsconfig.json'.
20
20
  --pretty Enable color and formatting in output to make errors easier to read.
21
21
  --clean Remove the output directory before generating files. [default: false]
22
+ --watch, -w Watch for changes and regenerate files. [default: false]
22
23
  `;
23
24
  function printHelpText() {
24
25
  // eslint-disable-next-line no-console
@@ -42,6 +43,7 @@ function parseCLIArgs(args, cwd) {
42
43
  project: { type: 'string', short: 'p', default: '.' },
43
44
  pretty: { type: 'boolean' },
44
45
  clean: { type: 'boolean', default: false },
46
+ watch: { type: 'boolean', short: 'w', default: false },
45
47
  },
46
48
  allowNegative: true,
47
49
  });
@@ -51,6 +53,7 @@ function parseCLIArgs(args, cwd) {
51
53
  project: (0, core_1.resolve)(cwd, values.project),
52
54
  pretty: values.pretty,
53
55
  clean: values.clean,
56
+ watch: values.watch,
54
57
  };
55
58
  }
56
59
  catch (cause) {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;AAgBA,sCAGC;AAED,oCAGC;AAcD,oCAuBC;AA7DD,yCAAsC;AACtC,gDAAgD;AAChD,mEAA0C;AAC1C,yCAA+C;AAE/C,MAAM,QAAQ,GAAG;;;;;;;;;CAShB,CAAC;AAEF,SAAgB,aAAa;IAC3B,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACxB,CAAC;AAED,SAAgB,YAAY;IAC1B,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,sBAAW,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAUD;;;GAGG;AACH,SAAgB,YAAY,CAAC,IAAc,EAAE,GAAW;IACtD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,qBAAS,EAAC;YAC3B,IAAI;YACJ,OAAO,EAAE;gBACP,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;gBACrD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;gBACxD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE;gBACrD,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;aAC3C;YACD,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,IAAA,cAAO,EAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC;YACrC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,4BAAiB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;AAiBA,sCAGC;AAED,oCAGC;AAeD,oCAyBC;AAjED,yCAAsC;AACtC,gDAAgD;AAChD,mEAA0C;AAC1C,yCAA+C;AAE/C,MAAM,QAAQ,GAAG;;;;;;;;;;CAUhB,CAAC;AAEF,SAAgB,aAAa;IAC3B,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACxB,CAAC;AAED,SAAgB,YAAY;IAC1B,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,sBAAW,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAWD;;;GAGG;AACH,SAAgB,YAAY,CAAC,IAAc,EAAE,GAAW;IACtD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,qBAAS,EAAC;YAC3B,IAAI;YACJ,OAAO,EAAE;gBACP,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;gBACrD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;gBACxD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE;gBACrD,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC1C,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;aACvD;YACD,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,IAAA,cAAO,EAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC;YACrC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,4BAAiB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { runCMK } from './runner.js';
1
+ export { runCMK, runCMKInWatchMode } from './runner.js';
2
2
  export { type Logger, createLogger } from './logger/logger.js';
3
3
  export { WriteDtsFileError, ReadCSSModuleFileError } from './error.js';
4
4
  export { parseCLIArgs, printHelpText, printVersion } from './cli.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,MAAM,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,KAAK,MAAM,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/index.js CHANGED
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.shouldBePretty = exports.printVersion = exports.printHelpText = exports.parseCLIArgs = exports.ReadCSSModuleFileError = exports.WriteDtsFileError = exports.createLogger = exports.runCMK = void 0;
3
+ exports.shouldBePretty = exports.printVersion = exports.printHelpText = exports.parseCLIArgs = exports.ReadCSSModuleFileError = exports.WriteDtsFileError = exports.createLogger = exports.runCMKInWatchMode = exports.runCMK = void 0;
4
4
  var runner_js_1 = require("./runner.js");
5
5
  Object.defineProperty(exports, "runCMK", { enumerable: true, get: function () { return runner_js_1.runCMK; } });
6
+ Object.defineProperty(exports, "runCMKInWatchMode", { enumerable: true, get: function () { return runner_js_1.runCMKInWatchMode; } });
6
7
  var logger_js_1 = require("./logger/logger.js");
7
8
  Object.defineProperty(exports, "createLogger", { enumerable: true, get: function () { return logger_js_1.createLogger; } });
8
9
  var error_js_1 = require("./error.js");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AACf,gDAA+D;AAAzC,yGAAA,YAAY,OAAA;AAClC,uCAAuE;AAA9D,6GAAA,iBAAiB,OAAA;AAAE,kHAAA,sBAAsB,OAAA;AAClD,mCAAqE;AAA5D,sGAAA,YAAY,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,sGAAA,YAAY,OAAA;AAClD,2DAA2D;AAAlD,+GAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAAwD;AAA/C,mGAAA,MAAM,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAClC,gDAA+D;AAAzC,yGAAA,YAAY,OAAA;AAClC,uCAAuE;AAA9D,6GAAA,iBAAiB,OAAA;AAAE,kHAAA,sBAAsB,OAAA;AAClD,mCAAqE;AAA5D,sGAAA,YAAY,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,sGAAA,YAAY,OAAA;AAClD,2DAA2D;AAAlD,+GAAA,cAAc,OAAA"}
@@ -1,3 +1,4 @@
1
1
  import ts from 'typescript';
2
2
  export declare function formatDiagnostics(diagnostics: ts.Diagnostic[], host: ts.FormatDiagnosticsHost, pretty: boolean): string;
3
+ export declare function formatTime(date: Date, pretty: boolean): string;
3
4
  //# sourceMappingURL=formatter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/logger/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,EAAE,CAAC,UAAU,EAAE,EAC5B,IAAI,EAAE,EAAE,CAAC,qBAAqB,EAC9B,MAAM,EAAE,OAAO,GACd,MAAM,CAOR"}
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/logger/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAK5B,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,EAAE,CAAC,UAAU,EAAE,EAC5B,IAAI,EAAE,EAAE,CAAC,qBAAqB,EAC9B,MAAM,EAAE,OAAO,GACd,MAAM,CAOR;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAO9D"}
@@ -4,7 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.formatDiagnostics = formatDiagnostics;
7
+ exports.formatTime = formatTime;
7
8
  const typescript_1 = __importDefault(require("typescript"));
9
+ const GRAY = '\u001b[90m';
10
+ const RESET = '\u001b[0m';
8
11
  function formatDiagnostics(diagnostics, host, pretty) {
9
12
  const format = pretty ? typescript_1.default.formatDiagnosticsWithColorAndContext : typescript_1.default.formatDiagnostics;
10
13
  let result = '';
@@ -13,4 +16,13 @@ function formatDiagnostics(diagnostics, host, pretty) {
13
16
  }
14
17
  return result;
15
18
  }
19
+ function formatTime(date, pretty) {
20
+ const text = date.toLocaleTimeString('en-US', { timeZone: 'UTC' });
21
+ if (pretty) {
22
+ return `[${GRAY}${text}${RESET}]`;
23
+ }
24
+ else {
25
+ return `[${text}]`;
26
+ }
27
+ }
16
28
  //# sourceMappingURL=formatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/logger/formatter.ts"],"names":[],"mappings":";;;;;AAEA,8CAWC;AAbD,4DAA4B;AAE5B,SAAgB,iBAAiB,CAC/B,WAA4B,EAC5B,IAA8B,EAC9B,MAAe;IAEf,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,oBAAE,CAAC,oCAAoC,CAAC,CAAC,CAAC,oBAAE,CAAC,iBAAiB,CAAC;IACvF,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,MAAM,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChG,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/logger/formatter.ts"],"names":[],"mappings":";;;;;AAKA,8CAWC;AAED,gCAOC;AAzBD,4DAA4B;AAE5B,MAAM,IAAI,GAAG,YAAY,CAAC;AAC1B,MAAM,KAAK,GAAG,WAAW,CAAC;AAE1B,SAAgB,iBAAiB,CAC/B,WAA4B,EAC5B,IAA8B,EAC9B,MAAe;IAEf,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,oBAAE,CAAC,oCAAoC,CAAC,CAAC,CAAC,oBAAE,CAAC,iBAAiB,CAAC;IACvF,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,MAAM,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChG,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,UAAU,CAAC,IAAU,EAAE,MAAe;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACnE,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,IAAI,GAAG,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -1,8 +1,11 @@
1
- import { type Diagnostic, type SystemError } from '@css-modules-kit/core';
1
+ import { type Diagnostic } from '@css-modules-kit/core';
2
2
  export interface Logger {
3
3
  logDiagnostics(diagnostics: Diagnostic[]): void;
4
- logSystemError(error: SystemError): void;
5
- logMessage(message: string): void;
4
+ logError(error: unknown): void;
5
+ logMessage(message: string, options?: {
6
+ time?: boolean;
7
+ }): void;
8
+ clearScreen(): void;
6
9
  }
7
10
  export declare function createLogger(cwd: string, pretty: boolean): Logger;
8
11
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger/logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAyC,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIjH,MAAM,WAAW,MAAM;IACrB,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAChD,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IACzC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CA4BjE"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger/logger.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyC,KAAK,UAAU,EAAe,MAAM,uBAAuB,CAAC;AAI5G,MAAM,WAAW,MAAM;IACrB,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAChE,WAAW,IAAI,IAAI,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAwCjE"}
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createLogger = createLogger;
7
+ const node_util_1 = require("node:util");
7
8
  const core_1 = require("@css-modules-kit/core");
8
9
  const typescript_1 = __importDefault(require("typescript"));
9
10
  const formatter_js_1 = require("./formatter.js");
@@ -21,12 +22,25 @@ function createLogger(cwd, pretty) {
21
22
  const result = (0, formatter_js_1.formatDiagnostics)(diagnostics.map((d) => (0, core_1.convertDiagnostic)(d, getSourceFile)), host, pretty);
22
23
  process.stderr.write(result);
23
24
  },
24
- logSystemError(error) {
25
- const result = (0, formatter_js_1.formatDiagnostics)([(0, core_1.convertSystemError)(error)], host, pretty);
26
- process.stderr.write(result);
25
+ logError(error) {
26
+ // NOTE: SystemErrors are errors expected by the css-modules-kit specification and may occur within normal usage.
27
+ // These errors are formatted clearly and concisely. No stack trace is output.
28
+ //
29
+ // All other errors are unexpected errors. To assist in debugging when these errors occur, a stack trace is output.
30
+ if (error instanceof core_1.SystemError) {
31
+ const result = (0, formatter_js_1.formatDiagnostics)([(0, core_1.convertSystemError)(error)], host, pretty);
32
+ process.stderr.write(result);
33
+ }
34
+ else {
35
+ process.stderr.write(`${(0, node_util_1.inspect)(error, { colors: pretty })}\n`);
36
+ }
37
+ },
38
+ logMessage(message, options) {
39
+ const header = options?.time ? `${(0, formatter_js_1.formatTime)(new Date(), pretty)} ` : '';
40
+ process.stdout.write(`${header}${message}\n`);
27
41
  },
28
- logMessage(message) {
29
- process.stdout.write(`${message}\n`);
42
+ clearScreen() {
43
+ process.stdout.write('\x1B[2J\x1B[3J\x1B[H');
30
44
  },
31
45
  };
32
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger/logger.ts"],"names":[],"mappings":";;;;;AAWA,oCA4BC;AAtCD,gDAAiH;AACjH,4DAA4B;AAC5B,iDAAmD;AAQnD,SAAgB,YAAY,CAAC,GAAW,EAAE,MAAe;IACvD,MAAM,IAAI,GAA6B;QACrC,mBAAmB,EAAE,GAAG,EAAE,CAAC,GAAG;QAC9B,oBAAoB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,oBAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC1G,UAAU,EAAE,GAAG,EAAE,CAAC,oBAAE,CAAC,GAAG,CAAC,OAAO;KACjC,CAAC;IAEF,SAAS,aAAa,CAAC,IAA0B;QAC/C,OAAO,oBAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,oBAAE,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,oBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/G,CAAC;IAED,OAAO;QACL,cAAc,CAAC,WAAyB;YACtC,MAAM,MAAM,GAAG,IAAA,gCAAiB,EAC9B,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,wBAAiB,EAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAC3D,IAAI,EACJ,MAAM,CACP,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QACD,cAAc,CAAC,KAAkB;YAC/B,MAAM,MAAM,GAAG,IAAA,gCAAiB,EAAC,CAAC,IAAA,yBAAkB,EAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QACD,UAAU,CAAC,OAAe;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACvC,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger/logger.ts"],"names":[],"mappings":";;;;;AAaA,oCAwCC;AArDD,yCAAoC;AAEpC,gDAA4G;AAC5G,4DAA4B;AAC5B,iDAA+D;AAS/D,SAAgB,YAAY,CAAC,GAAW,EAAE,MAAe;IACvD,MAAM,IAAI,GAA6B;QACrC,mBAAmB,EAAE,GAAG,EAAE,CAAC,GAAG;QAC9B,oBAAoB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,oBAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC1G,UAAU,EAAE,GAAG,EAAE,CAAC,oBAAE,CAAC,GAAG,CAAC,OAAO;KACjC,CAAC;IAEF,SAAS,aAAa,CAAC,IAA0B;QAC/C,OAAO,oBAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,oBAAE,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,oBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/G,CAAC;IAED,OAAO;QACL,cAAc,CAAC,WAAyB;YACtC,MAAM,MAAM,GAAG,IAAA,gCAAiB,EAC9B,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,wBAAiB,EAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAC3D,IAAI,EACJ,MAAM,CACP,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QACD,QAAQ,CAAC,KAAc;YACrB,iHAAiH;YACjH,8EAA8E;YAC9E,EAAE;YACF,mHAAmH;YACnH,IAAI,KAAK,YAAY,kBAAW,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,IAAA,gCAAiB,EAAC,CAAC,IAAA,yBAAkB,EAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC5E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAA,mBAAO,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QACD,UAAU,CAAC,OAAe,EAAE,OAA4B;YACtD,MAAM,MAAM,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAA,yBAAU,EAAC,IAAI,IAAI,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,OAAO,IAAI,CAAC,CAAC;QAChD,CAAC;QACD,WAAW;YACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { Diagnostic } from '@css-modules-kit/core';
2
+ import { type CMKConfig } from '@css-modules-kit/core';
3
+ interface ProjectArgs {
4
+ project: string;
5
+ }
6
+ export interface Project {
7
+ config: CMKConfig;
8
+ /** Whether the file matches the wildcard patterns in `include` / `exclude` options */
9
+ isWildcardMatchedFile(fileName: string): boolean;
10
+ /**
11
+ * Add a file to the project.
12
+ * @throws {ReadCSSModuleFileError}
13
+ */
14
+ addFile(fileName: string): void;
15
+ /**
16
+ * Update a file in the project.
17
+ * @throws {ReadCSSModuleFileError}
18
+ */
19
+ updateFile(fileName: string): void;
20
+ /** Remove a file from the project. */
21
+ removeFile(fileName: string): void;
22
+ /**
23
+ * Get all diagnostics.
24
+ * Including three types of diagnostics: project diagnostics, syntactic diagnostics, and semantic diagnostics.
25
+ * - Project diagnostics: For example, it includes configuration errors in tsconfig.json or warnings when there are no target files.
26
+ * - Syntactic diagnostics: Syntax errors in CSS Module files.
27
+ * - Semantic diagnostics: Errors related to the use of imports and exports in CSS module files.
28
+ * If there are any project diagnostics or syntactic diagnostics, semantic diagnostics will be skipped.
29
+ */
30
+ getDiagnostics(): Diagnostic[];
31
+ /**
32
+ * Emit .d.ts files for all project files.
33
+ * @throws {WriteDtsFileError}
34
+ */
35
+ emitDtsFiles(): Promise<void>;
36
+ }
37
+ /**
38
+ * Create a Project instance.
39
+ * Project is like a facade that calls core operations such as loading settings, parsing CSS Module files, and performing checks.
40
+ * The parsing and checking results are cached, and methods are also provided to clear the cache when files change.
41
+ * @throws {TsConfigFileNotFoundError}
42
+ * @throws {ReadCSSModuleFileError}
43
+ */
44
+ export declare function createProject(args: ProjectArgs): Project;
45
+ export {};
46
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAEL,KAAK,SAAS,EAQf,MAAM,uBAAuB,CAAC;AAK/B,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,SAAS,CAAC;IAClB,sFAAsF;IACtF,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACjD;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,sCAAsC;IACtC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;;;;OAOG;IACH,cAAc,IAAI,UAAU,EAAE,CAAC;IAC/B;;;OAGG;IACH,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAoKxD"}
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createProject = createProject;
7
+ const node_fs_1 = require("node:fs");
8
+ const core_1 = require("@css-modules-kit/core");
9
+ const typescript_1 = __importDefault(require("typescript"));
10
+ const dts_writer_js_1 = require("./dts-writer.js");
11
+ const error_js_1 = require("./error.js");
12
+ /**
13
+ * Create a Project instance.
14
+ * Project is like a facade that calls core operations such as loading settings, parsing CSS Module files, and performing checks.
15
+ * The parsing and checking results are cached, and methods are also provided to clear the cache when files change.
16
+ * @throws {TsConfigFileNotFoundError}
17
+ * @throws {ReadCSSModuleFileError}
18
+ */
19
+ function createProject(args) {
20
+ const config = (0, core_1.readConfigFile)(args.project);
21
+ const getCanonicalFileName = (fileName) => typescript_1.default.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase();
22
+ const moduleResolutionCache = typescript_1.default.createModuleResolutionCache(config.basePath, getCanonicalFileName, config.compilerOptions);
23
+ const resolver = (0, core_1.createResolver)(config.compilerOptions, moduleResolutionCache);
24
+ const matchesPattern = (0, core_1.createMatchesPattern)(config);
25
+ const cssModuleMap = new Map();
26
+ const semanticDiagnosticsMap = new Map();
27
+ // Tracks whether .d.ts has been emitted after the last change
28
+ const emittedSet = new Set();
29
+ const getCSSModule = (path) => cssModuleMap.get(path);
30
+ const exportBuilder = (0, core_1.createExportBuilder)({ getCSSModule, matchesPattern, resolver });
31
+ for (const fileName of (0, core_1.getFileNamesByPattern)(config)) {
32
+ // NOTE: Files may be deleted between executing `getFileNamesByPattern` and `tryParseCSSModule`.
33
+ // Therefore, `tryParseCSSModule` may return `undefined`.
34
+ const cssModule = tryParseCSSModule(fileName);
35
+ if (cssModule)
36
+ cssModuleMap.set(fileName, cssModule);
37
+ }
38
+ /**
39
+ * @throws {ReadCSSModuleFileError}
40
+ */
41
+ function addFile(fileName) {
42
+ if (cssModuleMap.has(fileName))
43
+ return;
44
+ const cssModule = tryParseCSSModule(fileName);
45
+ if (!cssModule)
46
+ return;
47
+ cssModuleMap.set(fileName, cssModule);
48
+ // TODO: Delete only the minimum amount of check stage cache
49
+ moduleResolutionCache.clear();
50
+ exportBuilder.clearCache();
51
+ semanticDiagnosticsMap.clear();
52
+ }
53
+ /**
54
+ * @throws {ReadCSSModuleFileError}
55
+ */
56
+ function updateFile(fileName) {
57
+ if (!cssModuleMap.has(fileName))
58
+ return;
59
+ const cssModule = tryParseCSSModule(fileName);
60
+ if (!cssModule)
61
+ return;
62
+ cssModuleMap.set(fileName, cssModule);
63
+ // TODO: Delete only the minimum amount of check stage cache
64
+ exportBuilder.clearCache();
65
+ semanticDiagnosticsMap.clear();
66
+ emittedSet.delete(fileName);
67
+ }
68
+ function removeFile(fileName) {
69
+ if (!cssModuleMap.has(fileName))
70
+ return;
71
+ cssModuleMap.delete(fileName);
72
+ // TODO: Delete only the minimum amount of check stage cache
73
+ moduleResolutionCache.clear();
74
+ exportBuilder.clearCache();
75
+ semanticDiagnosticsMap.clear();
76
+ emittedSet.delete(fileName);
77
+ }
78
+ /**
79
+ * @throws {ReadCSSModuleFileError}
80
+ */
81
+ function tryParseCSSModule(fileName) {
82
+ let text;
83
+ try {
84
+ // NOTE: We are not using asynchronous APIs for the following reasons:
85
+ //
86
+ // - Asynchronous APIs are slow in Node.js.
87
+ // - https://github.com/nodejs/performance/issues/151
88
+ // - Handling race conditions is cumbersome.
89
+ // - Using an asynchronous API makes `addFile` asynchronous too.
90
+ // - If `deleteFile` runs while `addFile` is executing, a race condition occurs.
91
+ // - Avoiding this requires something like a mutex. However, implementing that is cumbersome.
92
+ text = (0, node_fs_1.readFileSync)(fileName, 'utf-8');
93
+ }
94
+ catch (error) {
95
+ if (isNodeJSSystemError(error) && error.code === 'ENOENT') {
96
+ return undefined;
97
+ }
98
+ throw new error_js_1.ReadCSSModuleFileError(fileName, error);
99
+ }
100
+ return (0, core_1.parseCSSModule)(text, { fileName, includeSyntaxError: true, keyframes: config.keyframes });
101
+ }
102
+ function getDiagnostics() {
103
+ const diagnostics = [...getProjectDiagnostics(), ...getSyntacticDiagnostics()];
104
+ // If there are project or syntactic diagnostics, skip semantic diagnostics
105
+ if (diagnostics.length > 0)
106
+ return diagnostics;
107
+ diagnostics.push(...getSemanticDiagnostics());
108
+ return diagnostics;
109
+ }
110
+ function getProjectDiagnostics() {
111
+ const diagnostics = [];
112
+ diagnostics.push(...config.diagnostics);
113
+ if (cssModuleMap.size === 0) {
114
+ diagnostics.push({
115
+ category: 'error',
116
+ text: `The file specified in tsconfig.json not found.`,
117
+ });
118
+ }
119
+ return diagnostics;
120
+ }
121
+ function getSyntacticDiagnostics() {
122
+ return Array.from(cssModuleMap.values()).flatMap(({ diagnostics }) => diagnostics);
123
+ }
124
+ function getSemanticDiagnostics() {
125
+ const allDiagnostics = [];
126
+ for (const cssModule of cssModuleMap.values()) {
127
+ let diagnostics = semanticDiagnosticsMap.get(cssModule.fileName);
128
+ if (!diagnostics) {
129
+ diagnostics = (0, core_1.checkCSSModule)(cssModule, config, exportBuilder, matchesPattern, resolver, getCSSModule);
130
+ semanticDiagnosticsMap.set(cssModule.fileName, diagnostics);
131
+ }
132
+ allDiagnostics.push(...diagnostics);
133
+ }
134
+ return allDiagnostics;
135
+ }
136
+ /**
137
+ * @throws {WriteDtsFileError}
138
+ */
139
+ async function emitDtsFiles() {
140
+ const promises = [];
141
+ for (const cssModule of cssModuleMap.values()) {
142
+ if (emittedSet.has(cssModule.fileName))
143
+ continue;
144
+ const dts = (0, core_1.generateDts)(cssModule, { resolver, matchesPattern }, { ...config, forTsPlugin: false });
145
+ promises.push((0, dts_writer_js_1.writeDtsFile)(dts.text, cssModule.fileName, {
146
+ outDir: config.dtsOutDir,
147
+ basePath: config.basePath,
148
+ arbitraryExtensions: config.arbitraryExtensions,
149
+ }).then(() => {
150
+ emittedSet.add(cssModule.fileName);
151
+ }));
152
+ }
153
+ await Promise.all(promises);
154
+ }
155
+ return {
156
+ config,
157
+ isWildcardMatchedFile: (fileName) => matchesPattern(fileName),
158
+ addFile,
159
+ updateFile,
160
+ removeFile,
161
+ getDiagnostics,
162
+ emitDtsFiles,
163
+ };
164
+ }
165
+ function isNodeJSSystemError(error) {
166
+ return typeof error === 'object' && error !== null && 'code' in error && typeof error.code === 'string';
167
+ }
168
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
package/dist/runner.d.ts CHANGED
@@ -1,9 +1,34 @@
1
1
  import type { Logger } from './logger/logger.js';
2
+ import { type Project } from './project.js';
3
+ interface RunnerArgs {
4
+ project: string;
5
+ clean: boolean;
6
+ }
7
+ export interface Watcher {
8
+ /** Exported for testing purposes */
9
+ project: Project;
10
+ close(): Promise<void>;
11
+ }
2
12
  /**
3
13
  * Run css-modules-kit .d.ts generation.
4
14
  * @param project The absolute path to the project directory or the path to `tsconfig.json`.
5
15
  * @throws {ReadCSSModuleFileError} When failed to read CSS Module file.
6
16
  * @throws {WriteDtsFileError}
17
+ * @returns Whether the process succeeded without errors.
7
18
  */
8
- export declare function runCMK(project: string, clean: boolean, logger: Logger): Promise<void>;
19
+ export declare function runCMK(args: RunnerArgs, logger: Logger): Promise<boolean>;
20
+ /**
21
+ * Run css-modules-kit .d.ts generation in watch mode.
22
+ *
23
+ * The promise resolves when the initial diagnostics report, emit, and watcher initialization are complete.
24
+ * Errors are reported through the logger.
25
+ *
26
+ * NOTE: For implementation simplicity, config file changes are not watched.
27
+ * @param project The absolute path to the project directory or the path to `tsconfig.json`.
28
+ * @throws {TsConfigFileNotFoundError}
29
+ * @throws {ReadCSSModuleFileError}
30
+ * @throws {WriteDtsFileError}
31
+ */
32
+ export declare function runCMKInWatchMode(args: RunnerArgs, logger: Logger): Promise<Watcher>;
33
+ export {};
9
34
  //# sourceMappingURL=runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAoCjD;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiE3F"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAE3D,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAY/E;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkG1F"}