@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.
@@ -530,6 +530,7 @@ function extractSchemaFromDto(classDecl, sourceFile, project) {
530
530
  warnings: [],
531
531
  warnedDecorators: /* @__PURE__ */ new Set(),
532
532
  emittedClasses: /* @__PURE__ */ new Map(),
533
+ usedSchemaNames: /* @__PURE__ */ new Set(),
533
534
  visiting: /* @__PURE__ */ new Set(),
534
535
  recursiveSchemas: /* @__PURE__ */ new Set(),
535
536
  depth: 0,
@@ -715,6 +716,7 @@ function buildNestedReference(className, fromFile, ctx, typeArgs = []) {
715
716
  if (ctx.visiting.has(cacheKey)) {
716
717
  const reserved = ctx.emittedClasses.get(cacheKey) ?? aliasFor(schemaBase, ctx);
717
718
  ctx.emittedClasses.set(cacheKey, reserved);
719
+ ctx.usedSchemaNames.add(reserved);
718
720
  ctx.recursiveSchemas.add(reserved);
719
721
  if (!ctx.warnedDecorators.has(`recursive:${reserved}`)) {
720
722
  ctx.warnedDecorators.add(`recursive:${reserved}`);
@@ -748,6 +750,7 @@ function buildNestedReference(className, fromFile, ctx, typeArgs = []) {
748
750
  });
749
751
  for (const [k, v] of newBindings) ctx.typeBindings.set(k, v);
750
752
  ctx.emittedClasses.set(cacheKey, schemaName);
753
+ ctx.usedSchemaNames.add(schemaName);
751
754
  ctx.visiting.add(cacheKey);
752
755
  ctx.depth += 1;
753
756
  const childNode = buildObject(resolved.decl, resolved.file, ctx);
@@ -755,15 +758,14 @@ function buildNestedReference(className, fromFile, ctx, typeArgs = []) {
755
758
  ctx.visiting.delete(cacheKey);
756
759
  for (const [k] of newBindings) ctx.typeBindings.delete(k);
757
760
  ctx.named.set(schemaName, childNode);
761
+ ctx.usedSchemaNames.add(schemaName);
758
762
  return { kind: "ref", name: schemaName };
759
763
  }
760
764
  function aliasFor(className, ctx) {
761
765
  const baseName = `${className}Schema`;
762
766
  let candidate = baseName;
763
767
  let i = 1;
764
- const used = new Set(ctx.named.keys());
765
- for (const v of ctx.emittedClasses.values()) used.add(v);
766
- while (used.has(candidate)) {
768
+ while (ctx.usedSchemaNames.has(candidate)) {
767
769
  candidate = `${baseName}_${i}`;
768
770
  i += 1;
769
771
  }
@@ -3234,18 +3236,27 @@ function refRootIdentifier(refName) {
3234
3236
  function hasSource(src) {
3235
3237
  return !!(src.schema || src.zodText || src.zodRef);
3236
3238
  }
3239
+ function escapeRegExp(s) {
3240
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3241
+ }
3242
+ var wordBoundaryRegexCache = /* @__PURE__ */ new Map();
3243
+ function wordBoundaryRegex(token) {
3244
+ let re = wordBoundaryRegexCache.get(token);
3245
+ if (re === void 0) {
3246
+ re = new RegExp(`\\b${escapeRegExp(token)}\\b`, "g");
3247
+ wordBoundaryRegexCache.set(token, re);
3248
+ }
3249
+ return re;
3250
+ }
3237
3251
  function applyRenames(text, renames) {
3238
3252
  if (!renames || renames.size === 0) return text;
3239
3253
  let out = text;
3240
3254
  for (const [from, to] of renames) {
3241
3255
  if (from === to) continue;
3242
- out = out.replace(new RegExp(`\\b${escapeRegExp(from)}\\b`, "g"), to);
3256
+ out = out.replace(wordBoundaryRegex(from), to);
3243
3257
  }
3244
3258
  return out;
3245
3259
  }
3246
- function escapeRegExp(s) {
3247
- return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3248
- }
3249
3260
  function isSelfReferential(name, text) {
3250
3261
  return new RegExp(`\\b${escapeRegExp(name)}\\b`).test(text);
3251
3262
  }
@@ -3257,7 +3268,23 @@ function planNestedSchemas(entries) {
3257
3268
  const local = Object.entries(entry.nestedSchemas);
3258
3269
  if (local.length === 0) continue;
3259
3270
  const rename = /* @__PURE__ */ new Map();
3260
- for (const [name] of local) rename.set(name, name);
3271
+ const renameValues = /* @__PURE__ */ new Set();
3272
+ const setRename = (key, value) => {
3273
+ const prev = rename.get(key);
3274
+ rename.set(key, value);
3275
+ if (prev !== void 0 && prev !== value) {
3276
+ let stillUsed = false;
3277
+ for (const v of rename.values()) {
3278
+ if (v === prev) {
3279
+ stillUsed = true;
3280
+ break;
3281
+ }
3282
+ }
3283
+ if (!stillUsed) renameValues.delete(prev);
3284
+ }
3285
+ renameValues.add(value);
3286
+ };
3287
+ for (const [name] of local) setRename(name, name);
3261
3288
  const textFor = (name) => {
3262
3289
  const raw = entry.nestedSchemas?.[name] ?? "";
3263
3290
  return applyRenames(raw, rename);
@@ -3275,11 +3302,11 @@ function planNestedSchemas(entries) {
3275
3302
  if (existing === text) continue;
3276
3303
  let i = 2;
3277
3304
  let candidate = `${name}_${i}`;
3278
- while (globalSchemas.has(candidate) && globalSchemas.get(candidate) !== textFor(name) || [...rename.values()].includes(candidate)) {
3305
+ while (globalSchemas.has(candidate) && globalSchemas.get(candidate) !== textFor(name) || renameValues.has(candidate)) {
3279
3306
  i += 1;
3280
3307
  candidate = `${name}_${i}`;
3281
3308
  }
3282
- rename.set(name, candidate);
3309
+ setRename(name, candidate);
3283
3310
  changed = true;
3284
3311
  }
3285
3312
  }