@codefast/cli 0.3.7-canary.0 → 0.3.13-canary.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 (124) hide show
  1. package/README.md +178 -262
  2. package/dist/analyze-DvtJ3j9m.mjs +92 -0
  3. package/dist/arrange-Bbh62DrU.mjs +107 -0
  4. package/dist/arrange-BqP2DI3w.mjs +8 -0
  5. package/dist/ast-helpers-MDRYuIAk.mjs +115 -0
  6. package/dist/bin.mjs +8 -0
  7. package/dist/caught-unknown-message-CRhkDWO7.mjs +20 -0
  8. package/dist/collectors-cn-BS8TTQ8O.mjs +61 -0
  9. package/dist/collectors-jsx-D9tL2ZPM.mjs +20 -0
  10. package/dist/collectors-tv-D2PXZaRt.mjs +170 -0
  11. package/dist/colors-BjdkCfGK.mjs +12 -0
  12. package/dist/commands/arrange.mjs +2 -0
  13. package/dist/commands/mirror.mjs +2 -0
  14. package/dist/commands/mirror.test.mjs +48 -0
  15. package/dist/commands/tag.mjs +2 -0
  16. package/dist/config-DVia_f9a.mjs +3 -0
  17. package/dist/config-reporter-SCcWDZc1.mjs +10 -0
  18. package/dist/constants-AtPhF-Ct.mjs +169 -0
  19. package/dist/constants-Bq5wdyLC.mjs +8 -0
  20. package/dist/dirent-list-BSDeRG5i.mjs +14 -0
  21. package/dist/engine-CcWEHSCq.mjs +287 -0
  22. package/dist/engine-DRTdkc5u.mjs +236 -0
  23. package/dist/errors-CFH4w6ic.mjs +15 -0
  24. package/dist/errors-CpU1ogfA.mjs +19 -0
  25. package/dist/formatters-DGE8jJ53.mjs +52 -0
  26. package/dist/group-file-ClW7XdD6.mjs +113 -0
  27. package/dist/grouping-c1grpCQT.mjs +235 -0
  28. package/dist/imports-DSVq1xhB.mjs +54 -0
  29. package/dist/lib/arrange/application/analyze.mjs +2 -0
  30. package/dist/lib/arrange/application/analyze.test.mjs +171 -0
  31. package/dist/lib/arrange/application/group-file.mjs +2 -0
  32. package/dist/lib/arrange/application/group-file.test.mjs +273 -0
  33. package/dist/lib/arrange/application/run-target.mjs +2 -0
  34. package/dist/lib/arrange/application/run-target.test.mjs +97 -0
  35. package/dist/lib/arrange/domain/ast/ast-helpers.mjs +2 -0
  36. package/dist/lib/arrange/domain/ast/ast-helpers.test.mjs +148 -0
  37. package/dist/lib/arrange/domain/ast/collectors-cn.mjs +2 -0
  38. package/dist/lib/arrange/domain/ast/collectors-cn.test.mjs +58 -0
  39. package/dist/lib/arrange/domain/ast/collectors-jsx.mjs +2 -0
  40. package/dist/lib/arrange/domain/ast/collectors-jsx.test.mjs +20 -0
  41. package/dist/lib/arrange/domain/ast/collectors-tv.mjs +2 -0
  42. package/dist/lib/arrange/domain/ast/collectors-tv.test.mjs +145 -0
  43. package/dist/lib/arrange/domain/ast/targets.mjs +2 -0
  44. package/dist/lib/arrange/domain/ast/targets.test.mjs +50 -0
  45. package/dist/lib/arrange/domain/constants.mjs +2 -0
  46. package/dist/lib/arrange/domain/errors.mjs +2 -0
  47. package/dist/lib/arrange/domain/grouping.mjs +2 -0
  48. package/dist/lib/arrange/domain/grouping.test.mjs +186 -0
  49. package/dist/lib/arrange/domain/imports.mjs +2 -0
  50. package/dist/lib/arrange/domain/imports.test.mjs +48 -0
  51. package/dist/lib/arrange/domain/tokenizer.mjs +2 -0
  52. package/dist/lib/arrange/domain/tokenizer.test.mjs +165 -0
  53. package/dist/lib/arrange/domain/types.mjs +1 -0
  54. package/dist/lib/arrange/index.mjs +16 -0
  55. package/dist/lib/arrange/infra/walk.mjs +2 -0
  56. package/dist/lib/arrange/infra/walk.test.mjs +50 -0
  57. package/dist/lib/arrange/presentation/formatters.mjs +2 -0
  58. package/dist/lib/arrange/presentation/formatters.test.mjs +73 -0
  59. package/dist/lib/arrange/presentation/report.mjs +2 -0
  60. package/dist/lib/config/domain/schema.mjs +2 -0
  61. package/dist/lib/config/index.mjs +4 -0
  62. package/dist/lib/config/infra/loader.mjs +2 -0
  63. package/dist/lib/config/infra/loader.test.mjs +116 -0
  64. package/dist/lib/infra/caught-unknown-message.mjs +2 -0
  65. package/dist/lib/infra/config-reporter.mjs +2 -0
  66. package/dist/lib/infra/fs-contract.mjs +1 -0
  67. package/dist/lib/infra/node-io.mjs +2 -0
  68. package/dist/lib/infra/workspace/repo-root.mjs +2 -0
  69. package/dist/lib/infra/workspace/repo-root.test.mjs +45 -0
  70. package/dist/lib/mirror/application/engine.mjs +2 -0
  71. package/dist/lib/mirror/application/sync.mjs +2 -0
  72. package/dist/lib/mirror/application/sync.test.mjs +482 -0
  73. package/dist/lib/mirror/domain/constants.mjs +2 -0
  74. package/dist/lib/mirror/domain/errors.mjs +2 -0
  75. package/dist/lib/mirror/domain/types.mjs +1 -0
  76. package/dist/lib/mirror/index.mjs +3 -0
  77. package/dist/lib/mirror/infra/dirent-list.mjs +2 -0
  78. package/dist/lib/mirror/infra/dirent-list.test.mjs +18 -0
  79. package/dist/lib/mirror/infra/package-filter.mjs +2 -0
  80. package/dist/lib/mirror/infra/package-filter.test.mjs +32 -0
  81. package/dist/lib/mirror/infra/path-normalizer.mjs +2 -0
  82. package/dist/lib/mirror/infra/update-pkg.mjs +2 -0
  83. package/dist/lib/mirror/infra/workspace-packages.mjs +2 -0
  84. package/dist/lib/mirror/infra/workspace-packages.test.mjs +167 -0
  85. package/dist/lib/mirror/presentation/reporter.mjs +2 -0
  86. package/dist/lib/tag/application/engine.mjs +2 -0
  87. package/dist/lib/tag/application/engine.test.mjs +159 -0
  88. package/dist/lib/tag/domain/types.mjs +1 -0
  89. package/dist/lib/tag/index.mjs +5 -0
  90. package/dist/lib/tag/infra/target-resolver.mjs +2 -0
  91. package/dist/lib/tag/presentation/colors.mjs +2 -0
  92. package/dist/lib/tag/presentation/tag-presenter.mjs +2 -0
  93. package/dist/lib/tag/presentation/tag-presenter.test.mjs +29 -0
  94. package/dist/loader-DpN-zl5g.mjs +78 -0
  95. package/dist/mirror-CbGiLXKT.mjs +2 -0
  96. package/dist/mirror-DqJE3ejL.mjs +66 -0
  97. package/dist/node-io-DFRbHO6m.mjs +30 -0
  98. package/dist/package-filter-C_8ryqvz.mjs +26 -0
  99. package/dist/path-normalizer-D4ceBO3l.mjs +7 -0
  100. package/dist/program-DR-H4tH3.mjs +34 -0
  101. package/dist/program.mjs +2 -0
  102. package/dist/repo-root-HmtIEm6J.mjs +22 -0
  103. package/dist/report-DYxvw34T.mjs +24 -0
  104. package/dist/reporter-CwIe_tAM.mjs +108 -0
  105. package/dist/run-target-CJWrqNT4.mjs +65 -0
  106. package/dist/schema-Or8RAARd.mjs +25 -0
  107. package/dist/sync-e1Sp-shi.mjs +157 -0
  108. package/dist/tag-Cd9JujU5.mjs +2 -0
  109. package/dist/tag-hEKVZ_-7.mjs +58 -0
  110. package/dist/tag-presenter-Cs66UBsH.mjs +63 -0
  111. package/dist/target-resolver-CR3FXMTy.mjs +170 -0
  112. package/dist/targets-pCTslnFh.mjs +106 -0
  113. package/dist/tokenizer-CeZx73Zu.mjs +216 -0
  114. package/dist/update-pkg-CnGfjWBy.mjs +37 -0
  115. package/dist/walk-DjgQn66n.mjs +33 -0
  116. package/dist/workspace-packages-K2NYTHJq.mjs +159 -0
  117. package/package.json +42 -53
  118. package/CHANGELOG.md +0 -15
  119. package/dist/cjs/index.cjs +0 -2
  120. package/dist/cjs/src/index.d.ts +0 -3
  121. package/dist/cjs/src/index.d.ts.map +0 -1
  122. package/dist/esm/index.js +0 -2
  123. package/dist/esm/src/index.d.ts +0 -3
  124. package/dist/esm/src/index.d.ts.map +0 -1
@@ -0,0 +1,159 @@
1
+ import { t as messageFromCaughtUnknown } from "./caught-unknown-message-CRhkDWO7.mjs";
2
+ import { t as normalizePath } from "./path-normalizer-D4ceBO3l.mjs";
3
+ import { s as mirrorGlobWarning } from "./reporter-CwIe_tAM.mjs";
4
+ import { globSync } from "node:fs";
5
+ import path from "node:path";
6
+ import picomatch from "picomatch";
7
+ import { parse } from "yaml";
8
+ //#region src/lib/mirror/infra/workspace-packages.ts
9
+ const PNPM_WORKSPACE = "pnpm-workspace.yaml";
10
+ /** Default when the workspace file is missing or has no `packages` key. */
11
+ const DEFAULT_INCLUDE = ["packages/*"];
12
+ function toPosix(filePath) {
13
+ return filePath.split(path.sep).join("/");
14
+ }
15
+ function isGlobPermissionError(caughtError) {
16
+ if (typeof caughtError !== "object" || caughtError === null || !("code" in caughtError)) return false;
17
+ const code = caughtError.code;
18
+ return code === "EACCES" || code === "EPERM";
19
+ }
20
+ /** Turn a pnpm `packages` glob into a `globSync` pattern that finds `package.json` files. */
21
+ function workspacePatternToPackageJsonGlob(pattern) {
22
+ const normalizedPattern = toPosix(pattern.trim()).replace(/\/+$/, "");
23
+ if (!normalizedPattern) return "**/package.json";
24
+ return `${normalizedPattern}/package.json`;
25
+ }
26
+ function splitWorkspacePackageEntries(raw) {
27
+ const include = [];
28
+ const exclude = [];
29
+ if (!Array.isArray(raw)) return {
30
+ include,
31
+ exclude
32
+ };
33
+ for (const entry of raw) {
34
+ if (typeof entry !== "string") continue;
35
+ const trimmed = entry.trim();
36
+ if (!trimmed) continue;
37
+ if (trimmed.startsWith("!")) exclude.push(trimmed.slice(1).trim());
38
+ else include.push(trimmed);
39
+ }
40
+ return {
41
+ include,
42
+ exclude
43
+ };
44
+ }
45
+ /**
46
+ * Reads `packages` from a parsed pnpm workspace document.
47
+ * @throws If the document is invalid or `packages` is present but not an array.
48
+ */
49
+ function parsePnpmWorkspaceDocument(doc) {
50
+ if (doc === null || doc === void 0) throw new Error(`${PNPM_WORKSPACE} root document must be an object (got empty or null)`);
51
+ if (typeof doc !== "object" || Array.isArray(doc)) throw new Error(`${PNPM_WORKSPACE} root must be a mapping, not an array or scalar`);
52
+ const parsedDoc = doc;
53
+ if (!Object.prototype.hasOwnProperty.call(parsedDoc, "packages")) return {
54
+ include: [],
55
+ exclude: [],
56
+ hasPackagesKey: false,
57
+ isEmptyPackagesArray: false
58
+ };
59
+ const pkgs = parsedDoc.packages;
60
+ if (!Array.isArray(pkgs)) throw new Error(`${PNPM_WORKSPACE} field "packages" must be an array`);
61
+ if (pkgs.length === 0) return {
62
+ include: [],
63
+ exclude: [],
64
+ hasPackagesKey: true,
65
+ isEmptyPackagesArray: true
66
+ };
67
+ return {
68
+ ...splitWorkspacePackageEntries(pkgs),
69
+ hasPackagesKey: true,
70
+ isEmptyPackagesArray: false
71
+ };
72
+ }
73
+ async function readWorkspaceYaml(rootDir, fs) {
74
+ const workspaceYamlPath = path.join(rootDir, PNPM_WORKSPACE);
75
+ if (!fs.existsSync(workspaceYamlPath)) return { exists: false };
76
+ let raw;
77
+ try {
78
+ raw = await fs.readFile(workspaceYamlPath, "utf8");
79
+ } catch (caughtReadError) {
80
+ throw new Error(`Failed to read ${PNPM_WORKSPACE}: ${messageFromCaughtUnknown(caughtReadError)}`);
81
+ }
82
+ let doc;
83
+ try {
84
+ doc = parse(raw);
85
+ } catch (caughtYamlParseError) {
86
+ throw new Error(`Failed to parse ${PNPM_WORKSPACE}: ${messageFromCaughtUnknown(caughtYamlParseError)}`);
87
+ }
88
+ if (doc === null || doc === void 0) throw new Error(`${PNPM_WORKSPACE} must define a mapping at the document root`);
89
+ return {
90
+ exists: true,
91
+ doc
92
+ };
93
+ }
94
+ /**
95
+ * Workspace package directories relative to `rootDir` (POSIX slashes), sorted.
96
+ * Reads `pnpm-workspace.yaml` when present; otherwise uses `packages/*`.
97
+ * Only paths with a `package.json` are returned (same practical rule as pnpm).
98
+ */
99
+ async function findWorkspacePackageRelPaths(rootDir, fs, logger) {
100
+ const workspaceYaml = await readWorkspaceYaml(rootDir, fs);
101
+ let include;
102
+ let exclude;
103
+ let multiSource;
104
+ if (!workspaceYaml.exists) {
105
+ include = [...DEFAULT_INCLUDE];
106
+ exclude = [];
107
+ multiSource = "default-patterns";
108
+ } else {
109
+ const parsed = parsePnpmWorkspaceDocument(workspaceYaml.doc);
110
+ if (!parsed.hasPackagesKey) {
111
+ include = [...DEFAULT_INCLUDE];
112
+ exclude = [];
113
+ multiSource = "default-patterns";
114
+ } else if (parsed.isEmptyPackagesArray) return {
115
+ relPaths: [],
116
+ multiSource: "declared-empty"
117
+ };
118
+ else {
119
+ include = parsed.include;
120
+ exclude = parsed.exclude;
121
+ multiSource = "pnpm-workspace-yaml";
122
+ }
123
+ }
124
+ const found = /* @__PURE__ */ new Set();
125
+ const globOpts = {
126
+ cwd: rootDir,
127
+ posix: true,
128
+ ...path.sep === "\\" ? { windowsPathsNoEscape: true } : {}
129
+ };
130
+ for (const pattern of include) {
131
+ const globPat = workspacePatternToPackageJsonGlob(pattern);
132
+ let matches;
133
+ try {
134
+ matches = globSync(globPat, globOpts);
135
+ } catch (caughtGlobError) {
136
+ if (isGlobPermissionError(caughtGlobError)) {
137
+ mirrorGlobWarning(logger, `Skipping workspace glob "${pattern}" (${messageFromCaughtUnknown(caughtGlobError)})`);
138
+ continue;
139
+ }
140
+ throw new Error(`Invalid workspace glob "${pattern}": ${messageFromCaughtUnknown(caughtGlobError)}`);
141
+ }
142
+ for (const matchedPath of matches) {
143
+ const posix = toPosix(matchedPath);
144
+ if (!posix.endsWith("/package.json")) continue;
145
+ const rel = posix.slice(0, -13);
146
+ if (!rel) continue;
147
+ found.add(normalizePath(rel));
148
+ }
149
+ }
150
+ const excludeMatchers = exclude.map((pat) => picomatch(pat, { dot: true }));
151
+ const relPaths = [...found].filter((rel) => !excludeMatchers.some((isMatch) => isMatch(rel)));
152
+ relPaths.sort((a, b) => a.localeCompare(b));
153
+ return {
154
+ relPaths,
155
+ multiSource
156
+ };
157
+ }
158
+ //#endregion
159
+ export { workspacePatternToPackageJsonGlob as i, parsePnpmWorkspaceDocument as n, splitWorkspacePackageEntries as r, findWorkspacePackageRelPaths as t };
package/package.json CHANGED
@@ -1,88 +1,77 @@
1
1
  {
2
2
  "name": "@codefast/cli",
3
- "version": "0.3.7-canary.0",
4
- "description": "Command line interface tools for CodeFast development",
3
+ "version": "0.3.13-canary.0",
4
+ "description": "Developer CLI for the Codefast monorepo (mirror, arrange)",
5
5
  "keywords": [
6
6
  "cli",
7
- "command-line",
8
- "tools",
9
- "typescript",
7
+ "codefast",
10
8
  "monorepo",
11
- "development"
9
+ "tailwind",
10
+ "tailwindcss",
11
+ "typescript"
12
12
  ],
13
13
  "homepage": "https://github.com/codefastlabs/codefast/tree/main/packages/cli#readme",
14
14
  "bugs": {
15
15
  "url": "https://github.com/codefastlabs/codefast/issues"
16
16
  },
17
+ "license": "MIT",
18
+ "author": "Vuong Phan <mr.thevuong@gmail.com>",
17
19
  "repository": {
18
20
  "type": "git",
19
21
  "url": "git+https://github.com/codefastlabs/codefast.git",
20
22
  "directory": "packages/cli"
21
23
  },
22
- "license": "MIT",
23
- "author": "Vuong Phan <mr.thevuong@gmail.com>",
24
- "sideEffects": false,
25
- "type": "module",
26
- "exports": {
27
- ".": {
28
- "import": {
29
- "default": "./dist/esm/index.js",
30
- "types": "./dist/esm/index.d.ts"
31
- },
32
- "require": {
33
- "default": "./dist/cjs/index.cjs",
34
- "types": "./dist/cjs/index.d.cts"
35
- }
36
- }
37
- },
38
- "main": "./dist/cjs/index.cjs",
39
- "module": "./dist/esm/index.js",
40
- "types": "./dist/esm/index.d.ts",
41
24
  "bin": {
42
- "codefast": "./dist/esm/index.js"
25
+ "codefast": "./dist/bin.mjs"
43
26
  },
44
27
  "files": [
45
28
  "dist",
46
- "CHANGELOG.md",
29
+ "LICENSE",
47
30
  "README.md",
48
- "LICENSE"
31
+ "package.json"
49
32
  ],
33
+ "type": "module",
34
+ "imports": {
35
+ "#*": [
36
+ "./src/*",
37
+ "./src/*.ts",
38
+ "./src/*.tsx",
39
+ "./src/*/index.ts",
40
+ "./src/*/index.tsx"
41
+ ]
42
+ },
43
+ "publishConfig": {
44
+ "access": "public"
45
+ },
50
46
  "dependencies": {
51
- "chalk": "^5.3.0",
52
- "commander": "^14.0.0",
53
- "fast-glob": "^3.3.2",
54
- "inversify": "^7.6.1",
55
- "reflect-metadata": "^0.2.2",
56
- "ts-morph": "^26.0.0",
57
- "zod": "^4.0.10"
47
+ "commander": "^14.0.3",
48
+ "jiti": "^2.6.1",
49
+ "picomatch": "^4.0.4",
50
+ "typescript": "^6.0.2",
51
+ "yaml": "^2.8.3",
52
+ "zod": "^4.3.6"
58
53
  },
59
54
  "devDependencies": {
60
- "@rslib/core": "^0.11.0",
61
- "@swc/core": "^1.13.2",
55
+ "@swc/core": "^1.15.24",
62
56
  "@swc/jest": "^0.2.39",
63
57
  "@types/jest": "^30.0.0",
64
- "@types/node": "^24.1.0",
65
- "eslint": "^9.32.0",
66
- "jest": "^30.0.5",
67
- "jiti": "^2.5.1",
68
- "ts-node": "^10.9.2",
69
- "typescript": "^5.8.3",
70
- "@codefast/eslint-config": "0.3.7-canary.0",
71
- "@codefast/typescript-config": "0.3.7-canary.0"
58
+ "@types/node": "^25.6.0",
59
+ "@types/picomatch": "^4.0.3",
60
+ "@typescript/native-preview": "7.0.0-dev.20260411.1",
61
+ "jest": "^30.3.0",
62
+ "tsdown": "^0.21.8",
63
+ "@codefast/typescript-config": "0.3.13-canary.0"
72
64
  },
73
- "publishConfig": {
74
- "access": "public"
65
+ "engines": {
66
+ "node": ">=22.0.0"
75
67
  },
76
68
  "scripts": {
77
- "build": "rslib build",
69
+ "build": "tsdown",
70
+ "check-types": "tsgo --noEmit",
78
71
  "clean": "rm -rf dist",
79
- "dev": "rslib build --watch",
80
- "lint": "TIMING=1 eslint --max-warnings 0 .",
81
- "lint:fix": "TIMING=1 eslint --max-warnings 0 --fix .",
82
72
  "test": "jest",
83
73
  "test:coverage": "jest --coverage",
84
74
  "test:coverage:ci": "jest --coverage --ci",
85
- "test:watch": "jest --watch",
86
- "type-check": "tsc --noEmit"
75
+ "test:watch": "jest --watch"
87
76
  }
88
77
  }
package/CHANGELOG.md DELETED
@@ -1,15 +0,0 @@
1
- # @codefast/cli
2
-
3
- ## 0.3.7-canary.0
4
-
5
- ### Patch Changes
6
-
7
- - [`e66e9ac`](https://github.com/codefastlabs/codefast/commit/e66e9ac1186a94cb30d83d7125d4991ee91c7a41) Thanks [@thevuong](https://github.com/thevuong)! - refactor: improve readability and naming consistency across multiple packages
8
-
9
- - [`161717d`](https://github.com/codefastlabs/codefast/commit/161717db82457444b793bad252099084ef490085) Thanks [@thevuong](https://github.com/thevuong)! - feat(eslint-config): strengthen unicorn and TypeScript rule configurations
10
-
11
- - [`dea11de`](https://github.com/codefastlabs/codefast/commit/dea11deef4cab04a9ed2cd411251f6ad939acba6) Thanks [@thevuong](https://github.com/thevuong)! - chore(ui): integrate `tw-animate-css` and enhance animation easing consistency
12
-
13
- - [`2f0fd79`](https://github.com/codefastlabs/codefast/commit/2f0fd791d1505279a9c8570f8f3fddcf058d64ee) Thanks [@thevuong](https://github.com/thevuong)! - chore: reorder imports for consistency and clarity
14
-
15
- - [`728b150`](https://github.com/codefastlabs/codefast/commit/728b1503583d1f130c2f0abd503343dd8c802ee6) Thanks [@thevuong](https://github.com/thevuong)! - chore(tests): remove obsolete test files for core use cases and adapters
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- let __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_exports__={};function main(){console.log("Hello, world!")}for(var __webpack_i__ in main(),__webpack_exports__)exports[__webpack_i__]=__webpack_exports__[__webpack_i__];Object.defineProperty(exports,"__esModule",{value:!0});
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":""}
package/dist/esm/index.js DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- console.log("Hello, world!");
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":""}