@vaadin/hilla-generator-utils 24.8.0-alpha6 → 24.8.0-alpha7

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.
@@ -3,6 +3,7 @@ import type CodeConvertable from "./CodeConvertable.js";
3
3
  import StatementRecordManager, { type StatementRecord } from "./StatementRecordManager.js";
4
4
  export declare class NamedExportManager implements CodeConvertable<ExportDeclaration | undefined> {
5
5
  #private;
6
+ readonly collator: Intl.Collator;
6
7
  get size(): number;
7
8
  constructor(collator: Intl.Collator);
8
9
  add(name: string, isType?: boolean, uniqueId?: Identifier): Identifier;
@@ -3,13 +3,13 @@ import createFullyUniqueIdentifier from "../createFullyUniqueIdentifier.js";
3
3
  import StatementRecordManager from "./StatementRecordManager.js";
4
4
  import { createDependencyRecord } from "./utils.js";
5
5
  export class NamedExportManager {
6
- #collator;
6
+ collator;
7
7
  #map = new Map();
8
8
  get size() {
9
9
  return this.#map.size;
10
10
  }
11
11
  constructor(collator) {
12
- this.#collator = collator;
12
+ this.collator = collator;
13
13
  }
14
14
  add(name, isType, uniqueId) {
15
15
  const id = uniqueId ?? createFullyUniqueIdentifier(name);
@@ -35,7 +35,7 @@ export class NamedExportManager {
35
35
  return undefined;
36
36
  }
37
37
  const names = [...this.#map.keys()];
38
- names.sort(this.#collator.compare);
38
+ names.sort(this.collator.compare);
39
39
  return ts.factory.createExportDeclaration(undefined, false, ts.factory.createNamedExports(names.map((name) => {
40
40
  const { id, isType } = this.#map.get(name);
41
41
  return ts.factory.createExportSpecifier(isType, id, ts.factory.createIdentifier(name));
@@ -1 +1 @@
1
- {"mappings":"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","names":["#collator","#map","collator: Intl.Collator","name: string","isType?: boolean","uniqueId?: Identifier","path: string","#id","id: Identifier | string","result: Statement[]"],"sources":["/opt/agent/work/1af72d8adc613024/hilla/packages/ts/generator-utils/src/dependencies/ExportManager.ts"],"sourcesContent":["import ts, { type ExportAssignment, type ExportDeclaration, type Identifier, type Statement } from 'typescript';\nimport createFullyUniqueIdentifier from '../createFullyUniqueIdentifier.js';\nimport type CodeConvertable from './CodeConvertable.js';\nimport StatementRecordManager, { type StatementRecord } from './StatementRecordManager.js';\nimport { createDependencyRecord, type DependencyRecord } from './utils.js';\n\nexport class NamedExportManager implements CodeConvertable<ExportDeclaration | undefined> {\n readonly #collator: Intl.Collator;\n readonly #map = new Map<string, DependencyRecord>();\n\n get size(): number {\n return this.#map.size;\n }\n\n constructor(collator: Intl.Collator) {\n this.#collator = collator;\n }\n\n add(name: string, isType?: boolean, uniqueId?: Identifier): Identifier {\n const id = uniqueId ?? createFullyUniqueIdentifier(name);\n this.#map.set(name, createDependencyRecord(id, isType));\n return id;\n }\n\n getIdentifier(name: string): Identifier | undefined {\n return this.#map.get(name)?.id;\n }\n\n *identifiers(): IterableIterator<readonly [id: Identifier, isType: boolean]> {\n for (const { id, isType } of this.#map.values()) {\n yield [id, isType];\n }\n }\n\n isType(name: string): boolean | undefined {\n return this.#map.get(name)?.isType;\n }\n\n names(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n toCode(): ExportDeclaration | undefined {\n if (this.#map.size === 0) {\n return undefined;\n }\n\n const names = [...this.#map.keys()];\n // eslint-disable-next-line @typescript-eslint/unbound-method\n names.sort(this.#collator.compare);\n\n return ts.factory.createExportDeclaration(\n undefined,\n false,\n ts.factory.createNamedExports(\n names.map((name) => {\n const { id, isType } = this.#map.get(name)!;\n return ts.factory.createExportSpecifier(isType, id, ts.factory.createIdentifier(name));\n }),\n ),\n undefined,\n );\n }\n}\n\nexport class NamespaceExportManager extends StatementRecordManager<ExportDeclaration> {\n readonly #map = new Map<string, Identifier | null>();\n\n get size(): number {\n return this.#map.size;\n }\n\n addCombined(path: string, name: string, uniqueId?: Identifier): Identifier {\n const id = uniqueId ?? createFullyUniqueIdentifier(name);\n this.#map.set(path, id);\n return id;\n }\n\n addSpread(path: string): void {\n this.#map.set(path, null);\n }\n\n override clear(): void {\n this.#map.clear();\n }\n\n getIdentifier(path: string): Identifier | null | undefined {\n return this.#map.get(path);\n }\n\n identifiers(): IterableIterator<Identifier | null> {\n return this.#map.values();\n }\n\n isCombined(path: string): boolean | undefined {\n return this.#map.has(path) ? this.#map.get(path) !== null : undefined;\n }\n\n isSpread(path: string): boolean | undefined {\n return this.#map.has(path) ? this.#map.get(path) === null : undefined;\n }\n\n paths(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n override *statementRecords(): IterableIterator<StatementRecord<ExportDeclaration>> {\n for (const [path, id] of this.#map) {\n yield [\n path,\n ts.factory.createExportDeclaration(\n undefined,\n false,\n id !== null ? ts.factory.createNamespaceExport(id) : undefined,\n ts.factory.createStringLiteral(path),\n ),\n ];\n }\n }\n}\n\nexport class DefaultExportManager implements CodeConvertable<ExportAssignment | undefined> {\n #id?: Identifier;\n\n get isEmpty(): boolean {\n return !this.#id;\n }\n\n set(id: Identifier | string): Identifier {\n this.#id = typeof id === 'string' ? ts.factory.createIdentifier(id) : id;\n return this.#id;\n }\n\n toCode(): ExportAssignment | undefined {\n return this.#id ? ts.factory.createExportAssignment(undefined, undefined, this.#id) : undefined;\n }\n}\n\nexport default class ExportManager implements CodeConvertable<readonly Statement[]> {\n readonly default: DefaultExportManager = new DefaultExportManager();\n readonly named: NamedExportManager;\n readonly namespace: NamespaceExportManager;\n\n get size(): number {\n return (this.default.isEmpty ? 0 : 1) + this.named.size + this.namespace.size;\n }\n\n constructor(collator: Intl.Collator) {\n this.named = new NamedExportManager(collator);\n this.namespace = new NamespaceExportManager(collator);\n }\n\n toCode(): readonly Statement[] {\n const defaultStatement = this.default.toCode();\n const namedStatement = this.named.toCode();\n const namespaceStatements = this.namespace.toCode();\n\n const result: Statement[] = [];\n\n if (namedStatement) {\n result.push(namedStatement);\n }\n\n result.push(...namespaceStatements);\n\n if (defaultStatement) {\n result.push(defaultStatement);\n }\n\n return result;\n }\n}\n"],"version":3}
1
+ {"mappings":"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","names":["#map","collator: Intl.Collator","name: string","isType?: boolean","uniqueId?: Identifier","path: string","#id","id: Identifier | string","result: Statement[]"],"sources":["/opt/agent/work/1af72d8adc613024/hilla/packages/ts/generator-utils/src/dependencies/ExportManager.ts"],"sourcesContent":["import ts, { type ExportAssignment, type ExportDeclaration, type Identifier, type Statement } from 'typescript';\nimport createFullyUniqueIdentifier from '../createFullyUniqueIdentifier.js';\nimport type CodeConvertable from './CodeConvertable.js';\nimport StatementRecordManager, { type StatementRecord } from './StatementRecordManager.js';\nimport { createDependencyRecord, type DependencyRecord } from './utils.js';\n\nexport class NamedExportManager implements CodeConvertable<ExportDeclaration | undefined> {\n readonly collator: Intl.Collator;\n readonly #map = new Map<string, DependencyRecord>();\n\n get size(): number {\n return this.#map.size;\n }\n\n constructor(collator: Intl.Collator) {\n this.collator = collator;\n }\n\n add(name: string, isType?: boolean, uniqueId?: Identifier): Identifier {\n const id = uniqueId ?? createFullyUniqueIdentifier(name);\n this.#map.set(name, createDependencyRecord(id, isType));\n return id;\n }\n\n getIdentifier(name: string): Identifier | undefined {\n return this.#map.get(name)?.id;\n }\n\n *identifiers(): IterableIterator<readonly [id: Identifier, isType: boolean]> {\n for (const { id, isType } of this.#map.values()) {\n yield [id, isType];\n }\n }\n\n isType(name: string): boolean | undefined {\n return this.#map.get(name)?.isType;\n }\n\n names(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n toCode(): ExportDeclaration | undefined {\n if (this.#map.size === 0) {\n return undefined;\n }\n\n const names = [...this.#map.keys()];\n // eslint-disable-next-line @typescript-eslint/unbound-method\n names.sort(this.collator.compare);\n\n return ts.factory.createExportDeclaration(\n undefined,\n false,\n ts.factory.createNamedExports(\n names.map((name) => {\n const { id, isType } = this.#map.get(name)!;\n return ts.factory.createExportSpecifier(isType, id, ts.factory.createIdentifier(name));\n }),\n ),\n undefined,\n );\n }\n}\n\nexport class NamespaceExportManager extends StatementRecordManager<ExportDeclaration> {\n readonly #map = new Map<string, Identifier | null>();\n\n get size(): number {\n return this.#map.size;\n }\n\n addCombined(path: string, name: string, uniqueId?: Identifier): Identifier {\n const id = uniqueId ?? createFullyUniqueIdentifier(name);\n this.#map.set(path, id);\n return id;\n }\n\n addSpread(path: string): void {\n this.#map.set(path, null);\n }\n\n override clear(): void {\n this.#map.clear();\n }\n\n getIdentifier(path: string): Identifier | null | undefined {\n return this.#map.get(path);\n }\n\n identifiers(): IterableIterator<Identifier | null> {\n return this.#map.values();\n }\n\n isCombined(path: string): boolean | undefined {\n return this.#map.has(path) ? this.#map.get(path) !== null : undefined;\n }\n\n isSpread(path: string): boolean | undefined {\n return this.#map.has(path) ? this.#map.get(path) === null : undefined;\n }\n\n paths(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n override *statementRecords(): IterableIterator<StatementRecord<ExportDeclaration>> {\n for (const [path, id] of this.#map) {\n yield [\n path,\n ts.factory.createExportDeclaration(\n undefined,\n false,\n id !== null ? ts.factory.createNamespaceExport(id) : undefined,\n ts.factory.createStringLiteral(path),\n ),\n ];\n }\n }\n}\n\nexport class DefaultExportManager implements CodeConvertable<ExportAssignment | undefined> {\n #id?: Identifier;\n\n get isEmpty(): boolean {\n return !this.#id;\n }\n\n set(id: Identifier | string): Identifier {\n this.#id = typeof id === 'string' ? ts.factory.createIdentifier(id) : id;\n return this.#id;\n }\n\n toCode(): ExportAssignment | undefined {\n return this.#id ? ts.factory.createExportAssignment(undefined, undefined, this.#id) : undefined;\n }\n}\n\nexport default class ExportManager implements CodeConvertable<readonly Statement[]> {\n readonly default: DefaultExportManager = new DefaultExportManager();\n readonly named: NamedExportManager;\n readonly namespace: NamespaceExportManager;\n\n get size(): number {\n return (this.default.isEmpty ? 0 : 1) + this.named.size + this.namespace.size;\n }\n\n constructor(collator: Intl.Collator) {\n this.named = new NamedExportManager(collator);\n this.namespace = new NamespaceExportManager(collator);\n }\n\n toCode(): readonly Statement[] {\n const defaultStatement = this.default.toCode();\n const namedStatement = this.named.toCode();\n const namespaceStatements = this.namespace.toCode();\n\n const result: Statement[] = [];\n\n if (namedStatement) {\n result.push(namedStatement);\n }\n\n result.push(...namespaceStatements);\n\n if (defaultStatement) {\n result.push(defaultStatement);\n }\n\n return result;\n }\n}\n"],"version":3}
@@ -3,7 +3,6 @@ import type CodeConvertable from "./CodeConvertable.js";
3
3
  import StatementRecordManager, { type StatementRecord } from "./StatementRecordManager.js";
4
4
  export declare class NamedImportManager extends StatementRecordManager<ImportDeclaration> {
5
5
  #private;
6
- constructor(collator: Intl.Collator);
7
6
  get size(): number;
8
7
  add(path: string, specifier: string, isType?: boolean, uniqueId?: Identifier): Identifier;
9
8
  remove(path: string, specifier: string): void;
@@ -42,7 +41,7 @@ export declare class DefaultImportManager extends StatementRecordManager<ImportD
42
41
  [Symbol.iterator](): IterableIterator<readonly [path: string, id: Identifier, isType: boolean]>;
43
42
  }
44
43
  export default class ImportManager implements CodeConvertable<readonly Statement[]> {
45
- #private;
44
+ readonly collator: Intl.Collator;
46
45
  readonly default: DefaultImportManager;
47
46
  readonly named: NamedImportManager;
48
47
  readonly namespace: NamespaceImportManager;
@@ -1,14 +1,9 @@
1
1
  import ts from "typescript";
2
2
  import createFullyUniqueIdentifier from "../createFullyUniqueIdentifier.js";
3
- import StatementRecordManager from "./StatementRecordManager.js";
3
+ import StatementRecordManager, { createComparator } from "./StatementRecordManager.js";
4
4
  import { createDependencyRecord } from "./utils.js";
5
5
  export class NamedImportManager extends StatementRecordManager {
6
- #collator;
7
6
  #map = new Map();
8
- constructor(collator) {
9
- super(collator);
10
- this.#collator = collator;
11
- }
12
7
  get size() {
13
8
  return this.#map.size;
14
9
  }
@@ -55,7 +50,7 @@ export class NamedImportManager extends StatementRecordManager {
55
50
  *statementRecords() {
56
51
  for (const [path, specifiers] of this.#map) {
57
52
  const names = [...specifiers.keys()];
58
- names.sort(this.#collator.compare);
53
+ names.sort(this.collator.compare);
59
54
  const isTypeOnly = names.every((name) => specifiers.get(name).isType);
60
55
  yield [path, ts.factory.createImportDeclaration(undefined, ts.factory.createImportClause(isTypeOnly, undefined, ts.factory.createNamedImports(names.map((name) => {
61
56
  const { id, isType } = specifiers.get(name);
@@ -158,15 +153,15 @@ export class DefaultImportManager extends StatementRecordManager {
158
153
  }
159
154
  }
160
155
  export default class ImportManager {
156
+ collator;
161
157
  default;
162
158
  named;
163
159
  namespace;
164
- #collator;
165
160
  constructor(collator) {
166
161
  this.default = new DefaultImportManager(collator);
167
162
  this.named = new NamedImportManager(collator);
168
163
  this.namespace = new NamespaceImportManager(collator);
169
- this.#collator = collator;
164
+ this.collator = collator;
170
165
  }
171
166
  get size() {
172
167
  return this.default.size + this.named.size + this.namespace.size;
@@ -177,7 +172,7 @@ export default class ImportManager {
177
172
  ...this.named.statementRecords(),
178
173
  ...this.namespace.statementRecords()
179
174
  ];
180
- records.sort(StatementRecordManager.createComparator(this.#collator));
175
+ records.sort(createComparator(this.collator));
181
176
  return records.map(([, statement]) => statement);
182
177
  }
183
178
  fromCode(source) {
@@ -1 +1 @@
1
- {"mappings":"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","names":["#collator","#map","collator: Intl.Collator","path: string","specifier: string","isType?: boolean","uniqueId?: Identifier","name: string","source: ts.SourceFile"],"sources":["/opt/agent/work/1af72d8adc613024/hilla/packages/ts/generator-utils/src/dependencies/ImportManager.ts"],"sourcesContent":["import ts, { type Identifier, type ImportDeclaration, type Statement } from 'typescript';\nimport createFullyUniqueIdentifier from '../createFullyUniqueIdentifier.js';\nimport type CodeConvertable from './CodeConvertable.js';\nimport StatementRecordManager, { type StatementRecord } from './StatementRecordManager.js';\nimport { createDependencyRecord, type DependencyRecord } from './utils.js';\n\nexport class NamedImportManager extends StatementRecordManager<ImportDeclaration> {\n readonly #collator: Intl.Collator;\n readonly #map = new Map<string, Map<string, DependencyRecord>>();\n\n constructor(collator: Intl.Collator) {\n super(collator);\n this.#collator = collator;\n }\n\n get size(): number {\n return this.#map.size;\n }\n\n add(path: string, specifier: string, isType?: boolean, uniqueId?: Identifier): Identifier {\n const record = createDependencyRecord(uniqueId ?? createFullyUniqueIdentifier(specifier), isType);\n\n if (this.#map.has(path)) {\n this.#map.get(path)!.set(specifier, record);\n } else {\n this.#map.set(path, new Map([[specifier, record]]));\n }\n\n return record.id;\n }\n\n remove(path: string, specifier: string): void {\n const specifiers = this.#map.get(path);\n\n if (specifiers) {\n specifiers.delete(specifier);\n\n if (specifiers.size === 0) {\n this.#map.delete(path);\n }\n }\n }\n\n override clear(): void {\n this.#map.clear();\n }\n\n getIdentifier(path: string, specifier: string): Identifier | undefined {\n return this.#map.get(path)?.get(specifier)?.id;\n }\n\n iter(): IterableIterator<readonly [path: string, specifier: string, id: Identifier, isType: boolean]> {\n return this[Symbol.iterator]();\n }\n\n isType(path: string, specifier: string): boolean | undefined {\n return this.#map.get(path)?.get(specifier)?.isType;\n }\n\n paths(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n *specifiers(): IterableIterator<readonly [path: string, specifier: string]> {\n for (const [path, specifiers] of this.#map) {\n for (const specifier of specifiers.keys()) {\n yield [path, specifier];\n }\n }\n }\n\n override *statementRecords(): IterableIterator<StatementRecord<ImportDeclaration>> {\n for (const [path, specifiers] of this.#map) {\n const names = [...specifiers.keys()];\n // eslint-disable-next-line @typescript-eslint/unbound-method\n names.sort(this.#collator.compare);\n\n const isTypeOnly = names.every((name) => specifiers.get(name)!.isType);\n\n yield [\n path,\n ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(\n isTypeOnly,\n undefined,\n ts.factory.createNamedImports(\n names.map((name) => {\n const { id, isType } = specifiers.get(name)!;\n return ts.factory.createImportSpecifier(\n isTypeOnly ? false : isType,\n ts.factory.createIdentifier(name),\n id,\n );\n }),\n ),\n ),\n ts.factory.createStringLiteral(path),\n ),\n ];\n }\n }\n\n *[Symbol.iterator](): IterableIterator<readonly [path: string, specifier: string, id: Identifier, isType: boolean]> {\n for (const [path, specifiers] of this.#map) {\n for (const [specifier, { id, isType }] of specifiers) {\n yield [path, specifier, id, isType];\n }\n }\n }\n}\n\nexport class NamespaceImportManager extends StatementRecordManager<ImportDeclaration> {\n readonly #map = new Map<string, Identifier>();\n\n get size(): number {\n return this.#map.size;\n }\n\n add(path: string, name: string, uniqueId?: Identifier): Identifier {\n const id = uniqueId ?? createFullyUniqueIdentifier(name);\n this.#map.set(path, id);\n return id;\n }\n\n override clear(): void {\n this.#map.clear();\n }\n\n getIdentifier(path: string): Identifier | undefined {\n return this.#map.get(path);\n }\n\n iter(): IterableIterator<readonly [path: string, id: Identifier]> {\n return this[Symbol.iterator]();\n }\n\n paths(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n override *statementRecords(): IterableIterator<StatementRecord<ImportDeclaration>> {\n for (const [path, id] of this.#map) {\n yield [\n path,\n ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(false, undefined, ts.factory.createNamespaceImport(id)),\n ts.factory.createStringLiteral(path),\n ),\n ];\n }\n }\n\n remove(path: string): void {\n this.#map.delete(path);\n }\n\n *[Symbol.iterator](): IterableIterator<readonly [path: string, id: Identifier]> {\n for (const [path, id] of this.#map) {\n yield [path, id];\n }\n }\n}\n\nexport class DefaultImportManager extends StatementRecordManager<ImportDeclaration> {\n readonly #map = new Map<string, DependencyRecord>();\n\n get size(): number {\n return this.#map.size;\n }\n\n add(path: string, name: string, isType?: boolean, uniqueId?: Identifier): Identifier {\n const id = uniqueId ?? createFullyUniqueIdentifier(name);\n this.#map.set(path, createDependencyRecord(id, isType));\n return id;\n }\n\n getIdentifier(path: string): Identifier | undefined {\n return this.#map.get(path)?.id;\n }\n\n remove(path: string): void {\n if (this.#map.has(path)) {\n this.#map.delete(path);\n }\n }\n\n override clear(): void {\n this.#map.clear();\n }\n\n iter(): IterableIterator<readonly [path: string, id: Identifier, isType: boolean]> {\n return this[Symbol.iterator]();\n }\n\n isType(path: string): boolean | undefined {\n return this.#map.get(path)?.isType;\n }\n\n paths(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n override *statementRecords(): IterableIterator<StatementRecord<ImportDeclaration>> {\n for (const [path, { id, isType }] of this.#map) {\n yield [\n path,\n ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(isType, id, undefined),\n ts.factory.createStringLiteral(path),\n ),\n ];\n }\n }\n\n *[Symbol.iterator](): IterableIterator<readonly [path: string, id: Identifier, isType: boolean]> {\n for (const [path, { id, isType }] of this.#map) {\n yield [path, id, isType];\n }\n }\n}\n\nexport default class ImportManager implements CodeConvertable<readonly Statement[]> {\n readonly default: DefaultImportManager;\n readonly named: NamedImportManager;\n readonly namespace: NamespaceImportManager;\n\n readonly #collator: Intl.Collator;\n\n constructor(collator: Intl.Collator) {\n this.default = new DefaultImportManager(collator);\n this.named = new NamedImportManager(collator);\n this.namespace = new NamespaceImportManager(collator);\n this.#collator = collator;\n }\n\n get size(): number {\n return this.default.size + this.named.size + this.namespace.size;\n }\n\n toCode(): readonly Statement[] {\n const records = [\n ...this.default.statementRecords(),\n ...this.named.statementRecords(),\n ...this.namespace.statementRecords(),\n ];\n records.sort(StatementRecordManager.createComparator(this.#collator));\n\n return records.map(([, statement]) => statement);\n }\n\n fromCode(source: ts.SourceFile): void {\n this.default.clear();\n this.named.clear();\n this.namespace.clear();\n\n const imports = source.statements.filter((statement): statement is ImportDeclaration =>\n ts.isImportDeclaration(statement),\n );\n\n for (const { importClause, moduleSpecifier } of imports) {\n if (!importClause) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const { name, namedBindings } = importClause;\n const path = (moduleSpecifier as ts.StringLiteral).text;\n\n if (namedBindings) {\n if (ts.isNamespaceImport(namedBindings)) {\n this.namespace.add(path, namedBindings.name.text, namedBindings.name);\n } else {\n for (const { isTypeOnly, name: specifier } of namedBindings.elements) {\n this.named.add(path, specifier.text, isTypeOnly, specifier);\n }\n }\n } else if (name) {\n this.default.add(path, name.text, importClause.isTypeOnly, name);\n }\n }\n }\n}\n"],"version":3}
1
+ {"mappings":"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","names":["#map","path: string","specifier: string","isType?: boolean","uniqueId?: Identifier","name: string","collator: Intl.Collator","source: ts.SourceFile"],"sources":["/opt/agent/work/1af72d8adc613024/hilla/packages/ts/generator-utils/src/dependencies/ImportManager.ts"],"sourcesContent":["import ts, { type Identifier, type ImportDeclaration, type Statement } from 'typescript';\nimport createFullyUniqueIdentifier from '../createFullyUniqueIdentifier.js';\nimport type CodeConvertable from './CodeConvertable.js';\nimport StatementRecordManager, { createComparator, type StatementRecord } from './StatementRecordManager.js';\nimport { createDependencyRecord, type DependencyRecord } from './utils.js';\n\nexport class NamedImportManager extends StatementRecordManager<ImportDeclaration> {\n readonly #map = new Map<string, Map<string, DependencyRecord>>();\n\n get size(): number {\n return this.#map.size;\n }\n\n add(path: string, specifier: string, isType?: boolean, uniqueId?: Identifier): Identifier {\n const record = createDependencyRecord(uniqueId ?? createFullyUniqueIdentifier(specifier), isType);\n\n if (this.#map.has(path)) {\n this.#map.get(path)!.set(specifier, record);\n } else {\n this.#map.set(path, new Map([[specifier, record]]));\n }\n\n return record.id;\n }\n\n remove(path: string, specifier: string): void {\n const specifiers = this.#map.get(path);\n\n if (specifiers) {\n specifiers.delete(specifier);\n\n if (specifiers.size === 0) {\n this.#map.delete(path);\n }\n }\n }\n\n override clear(): void {\n this.#map.clear();\n }\n\n getIdentifier(path: string, specifier: string): Identifier | undefined {\n return this.#map.get(path)?.get(specifier)?.id;\n }\n\n iter(): IterableIterator<readonly [path: string, specifier: string, id: Identifier, isType: boolean]> {\n return this[Symbol.iterator]();\n }\n\n isType(path: string, specifier: string): boolean | undefined {\n return this.#map.get(path)?.get(specifier)?.isType;\n }\n\n paths(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n *specifiers(): IterableIterator<readonly [path: string, specifier: string]> {\n for (const [path, specifiers] of this.#map) {\n for (const specifier of specifiers.keys()) {\n yield [path, specifier];\n }\n }\n }\n\n override *statementRecords(): IterableIterator<StatementRecord<ImportDeclaration>> {\n for (const [path, specifiers] of this.#map) {\n const names = [...specifiers.keys()];\n // eslint-disable-next-line @typescript-eslint/unbound-method\n names.sort(this.collator.compare);\n\n const isTypeOnly = names.every((name) => specifiers.get(name)!.isType);\n\n yield [\n path,\n ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(\n isTypeOnly,\n undefined,\n ts.factory.createNamedImports(\n names.map((name) => {\n const { id, isType } = specifiers.get(name)!;\n return ts.factory.createImportSpecifier(\n isTypeOnly ? false : isType,\n ts.factory.createIdentifier(name),\n id,\n );\n }),\n ),\n ),\n ts.factory.createStringLiteral(path),\n ),\n ];\n }\n }\n\n *[Symbol.iterator](): IterableIterator<readonly [path: string, specifier: string, id: Identifier, isType: boolean]> {\n for (const [path, specifiers] of this.#map) {\n for (const [specifier, { id, isType }] of specifiers) {\n yield [path, specifier, id, isType];\n }\n }\n }\n}\n\nexport class NamespaceImportManager extends StatementRecordManager<ImportDeclaration> {\n readonly #map = new Map<string, Identifier>();\n\n get size(): number {\n return this.#map.size;\n }\n\n add(path: string, name: string, uniqueId?: Identifier): Identifier {\n const id = uniqueId ?? createFullyUniqueIdentifier(name);\n this.#map.set(path, id);\n return id;\n }\n\n override clear(): void {\n this.#map.clear();\n }\n\n getIdentifier(path: string): Identifier | undefined {\n return this.#map.get(path);\n }\n\n iter(): IterableIterator<readonly [path: string, id: Identifier]> {\n return this[Symbol.iterator]();\n }\n\n paths(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n override *statementRecords(): IterableIterator<StatementRecord<ImportDeclaration>> {\n for (const [path, id] of this.#map) {\n yield [\n path,\n ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(false, undefined, ts.factory.createNamespaceImport(id)),\n ts.factory.createStringLiteral(path),\n ),\n ];\n }\n }\n\n remove(path: string): void {\n this.#map.delete(path);\n }\n\n *[Symbol.iterator](): IterableIterator<readonly [path: string, id: Identifier]> {\n for (const [path, id] of this.#map) {\n yield [path, id];\n }\n }\n}\n\nexport class DefaultImportManager extends StatementRecordManager<ImportDeclaration> {\n readonly #map = new Map<string, DependencyRecord>();\n\n get size(): number {\n return this.#map.size;\n }\n\n add(path: string, name: string, isType?: boolean, uniqueId?: Identifier): Identifier {\n const id = uniqueId ?? createFullyUniqueIdentifier(name);\n this.#map.set(path, createDependencyRecord(id, isType));\n return id;\n }\n\n getIdentifier(path: string): Identifier | undefined {\n return this.#map.get(path)?.id;\n }\n\n remove(path: string): void {\n if (this.#map.has(path)) {\n this.#map.delete(path);\n }\n }\n\n override clear(): void {\n this.#map.clear();\n }\n\n iter(): IterableIterator<readonly [path: string, id: Identifier, isType: boolean]> {\n return this[Symbol.iterator]();\n }\n\n isType(path: string): boolean | undefined {\n return this.#map.get(path)?.isType;\n }\n\n paths(): IterableIterator<string> {\n return this.#map.keys();\n }\n\n override *statementRecords(): IterableIterator<StatementRecord<ImportDeclaration>> {\n for (const [path, { id, isType }] of this.#map) {\n yield [\n path,\n ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(isType, id, undefined),\n ts.factory.createStringLiteral(path),\n ),\n ];\n }\n }\n\n *[Symbol.iterator](): IterableIterator<readonly [path: string, id: Identifier, isType: boolean]> {\n for (const [path, { id, isType }] of this.#map) {\n yield [path, id, isType];\n }\n }\n}\n\nexport default class ImportManager implements CodeConvertable<readonly Statement[]> {\n readonly collator: Intl.Collator;\n readonly default: DefaultImportManager;\n readonly named: NamedImportManager;\n readonly namespace: NamespaceImportManager;\n\n constructor(collator: Intl.Collator) {\n this.default = new DefaultImportManager(collator);\n this.named = new NamedImportManager(collator);\n this.namespace = new NamespaceImportManager(collator);\n this.collator = collator;\n }\n\n get size(): number {\n return this.default.size + this.named.size + this.namespace.size;\n }\n\n toCode(): readonly Statement[] {\n const records = [\n ...this.default.statementRecords(),\n ...this.named.statementRecords(),\n ...this.namespace.statementRecords(),\n ];\n records.sort(createComparator(this.collator));\n\n return records.map(([, statement]) => statement);\n }\n\n fromCode(source: ts.SourceFile): void {\n this.default.clear();\n this.named.clear();\n this.namespace.clear();\n\n const imports = source.statements.filter((statement): statement is ImportDeclaration =>\n ts.isImportDeclaration(statement),\n );\n\n for (const { importClause, moduleSpecifier } of imports) {\n if (!importClause) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const { name, namedBindings } = importClause;\n const path = (moduleSpecifier as ts.StringLiteral).text;\n\n if (namedBindings) {\n if (ts.isNamespaceImport(namedBindings)) {\n this.namespace.add(path, namedBindings.name.text, namedBindings.name);\n } else {\n for (const { isTypeOnly, name: specifier } of namedBindings.elements) {\n this.named.add(path, specifier.text, isTypeOnly, specifier);\n }\n }\n } else if (name) {\n this.default.add(path, name.text, importClause.isTypeOnly, name);\n }\n }\n }\n}\n"],"version":3}
@@ -1,10 +1,9 @@
1
1
  import type { Statement } from "typescript";
2
2
  import type CodeConvertable from "./CodeConvertable.js";
3
3
  export type StatementRecord<T extends Statement> = readonly [path: string, declaration: T];
4
+ export declare function createComparator<T extends Statement>(collator: Intl.Collator): (recordA: StatementRecord<T>, recordB: StatementRecord<T>) => number;
4
5
  export default abstract class StatementRecordManager<T extends Statement> implements CodeConvertable<readonly T[]> {
5
- #private;
6
- static createComparator<T extends Statement>(collator: Intl.Collator): (recordA: StatementRecord<T>, recordB: StatementRecord<T>) => number;
7
- ["constructor"]: typeof StatementRecordManager;
6
+ readonly collator: Intl.Collator;
8
7
  constructor(collator: Intl.Collator);
9
8
  abstract statementRecords(): IterableIterator<StatementRecord<T>>;
10
9
  toCode(): readonly T[];
@@ -1,22 +1,22 @@
1
+ export function createComparator(collator) {
2
+ return ([pathA], [pathB]) => {
3
+ if (pathA.startsWith(".") && !pathB.startsWith(".")) {
4
+ return 1;
5
+ }
6
+ if (!pathA.startsWith(".") && pathB.startsWith(".")) {
7
+ return -1;
8
+ }
9
+ return collator.compare(pathA, pathB);
10
+ };
11
+ }
1
12
  export default class StatementRecordManager {
2
- static createComparator(collator) {
3
- return ([pathA], [pathB]) => {
4
- if (pathA.startsWith(".") && !pathB.startsWith(".")) {
5
- return 1;
6
- }
7
- if (!pathA.startsWith(".") && pathB.startsWith(".")) {
8
- return -1;
9
- }
10
- return collator.compare(pathA, pathB);
11
- };
12
- }
13
- #collator;
13
+ collator;
14
14
  constructor(collator) {
15
- this.#collator = collator;
15
+ this.collator = collator;
16
16
  }
17
17
  toCode() {
18
18
  const records = [...this.statementRecords()];
19
- records.sort(this.constructor.createComparator(this.#collator));
19
+ records.sort(createComparator(this.collator));
20
20
  return records.map(([, statement]) => statement);
21
21
  }
22
22
  }
@@ -1 +1 @@
1
- {"mappings":"AAKA,eAAe,MAAe,uBAAqF;CACjH,OAAO,iBACLA,UACsE;AACtE,SAAO,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,KAAK;AAC3B,OAAI,MAAM,WAAW,IAAI,KAAK,MAAM,WAAW,IAAI,EAAE;AACnD,WAAO;GACR;AAED,QAAK,MAAM,WAAW,IAAI,IAAI,MAAM,WAAW,IAAI,EAAE;AACnD,YAAQ;GACT;AAED,UAAO,SAAS,QAAQ,OAAO,MAAM;EACtC;CACF;CAGD,AAASC;CAET,YAAYD,UAAyB;AACnC,OAAKC,YAAY;CAClB;CAID,SAAuB;EACrB,MAAM,UAAU,CAAC,GAAG,KAAK,kBAAkB,AAAC;AAC5C,UAAQ,KAAK,KAAK,YAAY,iBAAiB,KAAKA,UAAU,CAAC;AAE/D,SAAO,QAAQ,IAAI,CAAC,GAAG,UAAU,KAAK,UAAU;CACjD;AAGF","names":["collator: Intl.Collator","#collator"],"sources":["/opt/agent/work/1af72d8adc613024/hilla/packages/ts/generator-utils/src/dependencies/StatementRecordManager.ts"],"sourcesContent":["import type { Statement } from 'typescript';\nimport type CodeConvertable from './CodeConvertable.js';\n\nexport type StatementRecord<T extends Statement> = readonly [path: string, declaration: T];\n\nexport default abstract class StatementRecordManager<T extends Statement> implements CodeConvertable<readonly T[]> {\n static createComparator<T extends Statement>(\n collator: Intl.Collator,\n ): (recordA: StatementRecord<T>, recordB: StatementRecord<T>) => number {\n return ([pathA], [pathB]) => {\n if (pathA.startsWith('.') && !pathB.startsWith('.')) {\n return 1;\n }\n\n if (!pathA.startsWith('.') && pathB.startsWith('.')) {\n return -1;\n }\n\n return collator.compare(pathA, pathB);\n };\n }\n\n declare ['constructor']: typeof StatementRecordManager;\n readonly #collator: Intl.Collator;\n\n constructor(collator: Intl.Collator) {\n this.#collator = collator;\n }\n\n abstract statementRecords(): IterableIterator<StatementRecord<T>>;\n\n toCode(): readonly T[] {\n const records = [...this.statementRecords()];\n records.sort(this.constructor.createComparator(this.#collator));\n\n return records.map(([, statement]) => statement);\n }\n\n abstract clear(): void;\n}\n"],"version":3}
1
+ {"mappings":"AAKA,OAAO,SAAS,iBACdA,UACsE;AACtE,QAAO,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,KAAK;AAC3B,MAAI,MAAM,WAAW,IAAI,KAAK,MAAM,WAAW,IAAI,EAAE;AACnD,UAAO;EACR;AAED,OAAK,MAAM,WAAW,IAAI,IAAI,MAAM,WAAW,IAAI,EAAE;AACnD,WAAQ;EACT;AAED,SAAO,SAAS,QAAQ,OAAO,MAAM;CACtC;AACF;AAED,eAAe,MAAe,uBAAqF;CACjH,AAAS;CAET,YAAYA,UAAyB;AACnC,OAAK,WAAW;CACjB;CAID,SAAuB;EACrB,MAAM,UAAU,CAAC,GAAG,KAAK,kBAAkB,AAAC;AAC5C,UAAQ,KAAK,iBAAiB,KAAK,SAAS,CAAC;AAE7C,SAAO,QAAQ,IAAI,CAAC,GAAG,UAAU,KAAK,UAAU;CACjD;AAGF","names":["collator: Intl.Collator"],"sources":["/opt/agent/work/1af72d8adc613024/hilla/packages/ts/generator-utils/src/dependencies/StatementRecordManager.ts"],"sourcesContent":["import type { Statement } from 'typescript';\nimport type CodeConvertable from './CodeConvertable.js';\n\nexport type StatementRecord<T extends Statement> = readonly [path: string, declaration: T];\n\nexport function createComparator<T extends Statement>(\n collator: Intl.Collator,\n): (recordA: StatementRecord<T>, recordB: StatementRecord<T>) => number {\n return ([pathA], [pathB]) => {\n if (pathA.startsWith('.') && !pathB.startsWith('.')) {\n return 1;\n }\n\n if (!pathA.startsWith('.') && pathB.startsWith('.')) {\n return -1;\n }\n\n return collator.compare(pathA, pathB);\n };\n}\n\nexport default abstract class StatementRecordManager<T extends Statement> implements CodeConvertable<readonly T[]> {\n readonly collator: Intl.Collator;\n\n constructor(collator: Intl.Collator) {\n this.collator = collator;\n }\n\n abstract statementRecords(): IterableIterator<StatementRecord<T>>;\n\n toCode(): readonly T[] {\n const records = [...this.statementRecords()];\n records.sort(createComparator(this.collator));\n\n return records.map(([, statement]) => statement);\n }\n\n abstract clear(): void;\n}\n"],"version":3}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaadin/hilla-generator-utils",
3
- "version": "24.8.0-alpha6",
3
+ "version": "24.8.0-alpha7",
4
4
  "description": "A set of utils for developing Hilla generator plugins",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -22,6 +22,7 @@
22
22
  "./dependencies/ExportManager.js": "./dependencies/ExportManager.js",
23
23
  "./dependencies/ImportManager.js": "./dependencies/ImportManager.js",
24
24
  "./dependencies/PathManager.js": "./dependencies/PathManager.js",
25
+ "./dependencies/StatementRecordManager.js": "./dependencies/StatementRecordManager.js",
25
26
  "./testing/snapshotMatcher.js": "./testing/snapshotMatcher.js",
26
27
  "./ast.js": "./ast.js",
27
28
  "./createFullyUniqueIdentifier.js": "./createFullyUniqueIdentifier.js",