@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.
package/dist/cli/main.js CHANGED
@@ -1154,18 +1154,27 @@ function refRootIdentifier(refName) {
1154
1154
  function hasSource(src) {
1155
1155
  return !!(src.schema || src.zodText || src.zodRef);
1156
1156
  }
1157
+ function escapeRegExp(s) {
1158
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1159
+ }
1160
+ var wordBoundaryRegexCache = /* @__PURE__ */ new Map();
1161
+ function wordBoundaryRegex(token) {
1162
+ let re = wordBoundaryRegexCache.get(token);
1163
+ if (re === void 0) {
1164
+ re = new RegExp(`\\b${escapeRegExp(token)}\\b`, "g");
1165
+ wordBoundaryRegexCache.set(token, re);
1166
+ }
1167
+ return re;
1168
+ }
1157
1169
  function applyRenames(text, renames) {
1158
1170
  if (!renames || renames.size === 0) return text;
1159
1171
  let out = text;
1160
1172
  for (const [from, to] of renames) {
1161
1173
  if (from === to) continue;
1162
- out = out.replace(new RegExp(`\\b${escapeRegExp(from)}\\b`, "g"), to);
1174
+ out = out.replace(wordBoundaryRegex(from), to);
1163
1175
  }
1164
1176
  return out;
1165
1177
  }
1166
- function escapeRegExp(s) {
1167
- return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1168
- }
1169
1178
  function isSelfReferential(name, text) {
1170
1179
  return new RegExp(`\\b${escapeRegExp(name)}\\b`).test(text);
1171
1180
  }
@@ -1177,7 +1186,23 @@ function planNestedSchemas(entries) {
1177
1186
  const local = Object.entries(entry.nestedSchemas);
1178
1187
  if (local.length === 0) continue;
1179
1188
  const rename = /* @__PURE__ */ new Map();
1180
- for (const [name] of local) rename.set(name, name);
1189
+ const renameValues = /* @__PURE__ */ new Set();
1190
+ const setRename = (key, value) => {
1191
+ const prev = rename.get(key);
1192
+ rename.set(key, value);
1193
+ if (prev !== void 0 && prev !== value) {
1194
+ let stillUsed = false;
1195
+ for (const v of rename.values()) {
1196
+ if (v === prev) {
1197
+ stillUsed = true;
1198
+ break;
1199
+ }
1200
+ }
1201
+ if (!stillUsed) renameValues.delete(prev);
1202
+ }
1203
+ renameValues.add(value);
1204
+ };
1205
+ for (const [name] of local) setRename(name, name);
1181
1206
  const textFor = (name) => {
1182
1207
  const raw = entry.nestedSchemas?.[name] ?? "";
1183
1208
  return applyRenames(raw, rename);
@@ -1195,11 +1220,11 @@ function planNestedSchemas(entries) {
1195
1220
  if (existing === text) continue;
1196
1221
  let i = 2;
1197
1222
  let candidate = `${name}_${i}`;
1198
- while (globalSchemas.has(candidate) && globalSchemas.get(candidate) !== textFor(name) || [...rename.values()].includes(candidate)) {
1223
+ while (globalSchemas.has(candidate) && globalSchemas.get(candidate) !== textFor(name) || renameValues.has(candidate)) {
1199
1224
  i += 1;
1200
1225
  candidate = `${name}_${i}`;
1201
1226
  }
1202
- rename.set(name, candidate);
1227
+ setRename(name, candidate);
1203
1228
  changed = true;
1204
1229
  }
1205
1230
  }
@@ -2494,6 +2519,7 @@ function extractSchemaFromDto(classDecl, sourceFile, project) {
2494
2519
  warnings: [],
2495
2520
  warnedDecorators: /* @__PURE__ */ new Set(),
2496
2521
  emittedClasses: /* @__PURE__ */ new Map(),
2522
+ usedSchemaNames: /* @__PURE__ */ new Set(),
2497
2523
  visiting: /* @__PURE__ */ new Set(),
2498
2524
  recursiveSchemas: /* @__PURE__ */ new Set(),
2499
2525
  depth: 0,
@@ -2679,6 +2705,7 @@ function buildNestedReference(className, fromFile, ctx, typeArgs = []) {
2679
2705
  if (ctx.visiting.has(cacheKey)) {
2680
2706
  const reserved = ctx.emittedClasses.get(cacheKey) ?? aliasFor(schemaBase, ctx);
2681
2707
  ctx.emittedClasses.set(cacheKey, reserved);
2708
+ ctx.usedSchemaNames.add(reserved);
2682
2709
  ctx.recursiveSchemas.add(reserved);
2683
2710
  if (!ctx.warnedDecorators.has(`recursive:${reserved}`)) {
2684
2711
  ctx.warnedDecorators.add(`recursive:${reserved}`);
@@ -2712,6 +2739,7 @@ function buildNestedReference(className, fromFile, ctx, typeArgs = []) {
2712
2739
  });
2713
2740
  for (const [k, v] of newBindings) ctx.typeBindings.set(k, v);
2714
2741
  ctx.emittedClasses.set(cacheKey, schemaName);
2742
+ ctx.usedSchemaNames.add(schemaName);
2715
2743
  ctx.visiting.add(cacheKey);
2716
2744
  ctx.depth += 1;
2717
2745
  const childNode = buildObject(resolved.decl, resolved.file, ctx);
@@ -2719,15 +2747,14 @@ function buildNestedReference(className, fromFile, ctx, typeArgs = []) {
2719
2747
  ctx.visiting.delete(cacheKey);
2720
2748
  for (const [k] of newBindings) ctx.typeBindings.delete(k);
2721
2749
  ctx.named.set(schemaName, childNode);
2750
+ ctx.usedSchemaNames.add(schemaName);
2722
2751
  return { kind: "ref", name: schemaName };
2723
2752
  }
2724
2753
  function aliasFor(className, ctx) {
2725
2754
  const baseName = `${className}Schema`;
2726
2755
  let candidate = baseName;
2727
2756
  let i = 1;
2728
- const used = new Set(ctx.named.keys());
2729
- for (const v of ctx.emittedClasses.values()) used.add(v);
2730
- while (used.has(candidate)) {
2757
+ while (ctx.usedSchemaNames.has(candidate)) {
2731
2758
  candidate = `${baseName}_${i}`;
2732
2759
  i += 1;
2733
2760
  }
@@ -4411,7 +4438,7 @@ async function watch(config, onChange) {
4411
4438
  }
4412
4439
 
4413
4440
  // src/index.ts
4414
- var VERSION = "0.5.0";
4441
+ var VERSION = "0.5.1";
4415
4442
 
4416
4443
  // src/cli/codegen.ts
4417
4444
  async function runCodegen(opts = {}) {