@dudousxd/nestjs-codegen 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -556,6 +556,7 @@ function extractSchemaFromDto(classDecl, sourceFile, project) {
556
556
  warnings: [],
557
557
  warnedDecorators: /* @__PURE__ */ new Set(),
558
558
  emittedClasses: /* @__PURE__ */ new Map(),
559
+ usedSchemaNames: /* @__PURE__ */ new Set(),
559
560
  visiting: /* @__PURE__ */ new Set(),
560
561
  recursiveSchemas: /* @__PURE__ */ new Set(),
561
562
  depth: 0,
@@ -741,6 +742,7 @@ function buildNestedReference(className, fromFile, ctx, typeArgs = []) {
741
742
  if (ctx.visiting.has(cacheKey)) {
742
743
  const reserved = ctx.emittedClasses.get(cacheKey) ?? aliasFor(schemaBase, ctx);
743
744
  ctx.emittedClasses.set(cacheKey, reserved);
745
+ ctx.usedSchemaNames.add(reserved);
744
746
  ctx.recursiveSchemas.add(reserved);
745
747
  if (!ctx.warnedDecorators.has(`recursive:${reserved}`)) {
746
748
  ctx.warnedDecorators.add(`recursive:${reserved}`);
@@ -774,6 +776,7 @@ function buildNestedReference(className, fromFile, ctx, typeArgs = []) {
774
776
  });
775
777
  for (const [k, v] of newBindings) ctx.typeBindings.set(k, v);
776
778
  ctx.emittedClasses.set(cacheKey, schemaName);
779
+ ctx.usedSchemaNames.add(schemaName);
777
780
  ctx.visiting.add(cacheKey);
778
781
  ctx.depth += 1;
779
782
  const childNode = buildObject(resolved.decl, resolved.file, ctx);
@@ -781,15 +784,14 @@ function buildNestedReference(className, fromFile, ctx, typeArgs = []) {
781
784
  ctx.visiting.delete(cacheKey);
782
785
  for (const [k] of newBindings) ctx.typeBindings.delete(k);
783
786
  ctx.named.set(schemaName, childNode);
787
+ ctx.usedSchemaNames.add(schemaName);
784
788
  return { kind: "ref", name: schemaName };
785
789
  }
786
790
  function aliasFor(className, ctx) {
787
791
  const baseName = `${className}Schema`;
788
792
  let candidate = baseName;
789
793
  let i = 1;
790
- const used = new Set(ctx.named.keys());
791
- for (const v of ctx.emittedClasses.values()) used.add(v);
792
- while (used.has(candidate)) {
794
+ while (ctx.usedSchemaNames.has(candidate)) {
793
795
  candidate = `${baseName}_${i}`;
794
796
  i += 1;
795
797
  }
@@ -3255,18 +3257,27 @@ function refRootIdentifier(refName) {
3255
3257
  function hasSource(src) {
3256
3258
  return !!(src.schema || src.zodText || src.zodRef);
3257
3259
  }
3260
+ function escapeRegExp(s) {
3261
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3262
+ }
3263
+ var wordBoundaryRegexCache = /* @__PURE__ */ new Map();
3264
+ function wordBoundaryRegex(token) {
3265
+ let re = wordBoundaryRegexCache.get(token);
3266
+ if (re === void 0) {
3267
+ re = new RegExp(`\\b${escapeRegExp(token)}\\b`, "g");
3268
+ wordBoundaryRegexCache.set(token, re);
3269
+ }
3270
+ return re;
3271
+ }
3258
3272
  function applyRenames(text, renames) {
3259
3273
  if (!renames || renames.size === 0) return text;
3260
3274
  let out = text;
3261
3275
  for (const [from, to] of renames) {
3262
3276
  if (from === to) continue;
3263
- out = out.replace(new RegExp(`\\b${escapeRegExp(from)}\\b`, "g"), to);
3277
+ out = out.replace(wordBoundaryRegex(from), to);
3264
3278
  }
3265
3279
  return out;
3266
3280
  }
3267
- function escapeRegExp(s) {
3268
- return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3269
- }
3270
3281
  function isSelfReferential(name, text) {
3271
3282
  return new RegExp(`\\b${escapeRegExp(name)}\\b`).test(text);
3272
3283
  }
@@ -3278,7 +3289,23 @@ function planNestedSchemas(entries) {
3278
3289
  const local = Object.entries(entry.nestedSchemas);
3279
3290
  if (local.length === 0) continue;
3280
3291
  const rename = /* @__PURE__ */ new Map();
3281
- for (const [name] of local) rename.set(name, name);
3292
+ const renameValues = /* @__PURE__ */ new Set();
3293
+ const setRename = (key, value) => {
3294
+ const prev = rename.get(key);
3295
+ rename.set(key, value);
3296
+ if (prev !== void 0 && prev !== value) {
3297
+ let stillUsed = false;
3298
+ for (const v of rename.values()) {
3299
+ if (v === prev) {
3300
+ stillUsed = true;
3301
+ break;
3302
+ }
3303
+ }
3304
+ if (!stillUsed) renameValues.delete(prev);
3305
+ }
3306
+ renameValues.add(value);
3307
+ };
3308
+ for (const [name] of local) setRename(name, name);
3282
3309
  const textFor = (name) => {
3283
3310
  const raw = entry.nestedSchemas?.[name] ?? "";
3284
3311
  return applyRenames(raw, rename);
@@ -3296,11 +3323,11 @@ function planNestedSchemas(entries) {
3296
3323
  if (existing === text) continue;
3297
3324
  let i = 2;
3298
3325
  let candidate = `${name}_${i}`;
3299
- while (globalSchemas.has(candidate) && globalSchemas.get(candidate) !== textFor(name) || [...rename.values()].includes(candidate)) {
3326
+ while (globalSchemas.has(candidate) && globalSchemas.get(candidate) !== textFor(name) || renameValues.has(candidate)) {
3300
3327
  i += 1;
3301
3328
  candidate = `${name}_${i}`;
3302
3329
  }
3303
- rename.set(name, candidate);
3330
+ setRename(name, candidate);
3304
3331
  changed = true;
3305
3332
  }
3306
3333
  }