MCPcopy Create free account
hub / github.com/colbymchenry/codegraph / modelOf

Function modelOf

src/ui-server/api/effects.ts:359–386  ·  view source on GitHub ↗
(segments: string[], args: string | null, receiverType: string | null)

Source from the content-addressed store, hash-verified

357const MODEL_SUFFIX = /(?:Repository|Repo|Dao|DAO|Model|Mapper|Store|Collection|Table|Service|Entity|Manager)$/;
358
359function modelOf(segments: string[], args: string | null, receiverType: string | null): string | null {
360 const noThis = segments[0] === 'this' || segments[0] === 'self' ? segments.slice(1) : segments;
361 const first = noThis[0] ?? '';
362 const secondLast = noThis.length >= 3 ? noThis[noThis.length - 2]! : '';
363 // `prisma.user.create`, `db.users.insert`, `_context.TodoItems.Add`, `this.prisma.user.findMany`.
364 if (noThis.length >= 3 && /^[A-Za-z_$][\w$]*$/.test(secondLast) && !/^(?:objects|query|session|db|\$|from|table|collection|opsForValue|Items)$/.test(secondLast) && !MODEL_SUFFIX.test(secondLast) && secondLast !== '$transaction') {
365 if (/^(?:prisma|db|database|orm|em|drizzle|sql|_context|context|dbContext|_db|ctx|this)$/i.test(first) || /(?:Context|Client|Prisma|Db|DB)$/.test(first)) return secondLast;
366 }
367 // `usersRepository.save`, `_orderRepository.AddAsync`, `userModel.find`, `ownerDao.get`.
368 const receiver = noThis.length >= 2 ? noThis[0]! : '';
369 if (receiver && MODEL_SUFFIX.test(receiver) && !/^(?:this|self)$/.test(receiver)) {
370 const stem = receiver.replace(/^_+/, '').replace(MODEL_SUFFIX, '');
371 if (stem) return stem;
372 }
373 // `User.objects.filter`, `User.query.get`, `User.find`, `Todo.query(on:)`, `User::find`.
374 if (noThis.length >= 2 && /^[A-Z][A-Za-z0-9]*$/.test(first) && !/^(?:DB|ActiveRecord|Files|File|Path|Base)$/.test(first)) return first;
375 // Spring: `owners.save` where `owners` is an `OwnerRepository`.
376 if (receiverType) {
377 const stem = receiverType.replace(/<[^>]*>/g, '').replace(/^I(?=[A-Z])/, '').replace(MODEL_SUFFIX, '');
378 if (stem && stem !== receiverType && /^[A-Z]/.test(stem) && !/^(?:Entity|Db|Data|Jdbc|Mongo|Session|Async)$/.test(stem)) return stem;
379 }
380 // `knex('users')`, `db.from('users')`, `collection('todos')`, `sql.table('x')`.
381 if (args && /^(?:knex|db|collection|table|from|into|selectFrom|insertInto|updateTable|deleteFrom|sql\.table|query|getRepository|getCollection|model)$/i.test(noThis[noThis.length - 1] ?? '')) {
382 const m = /^['"`]([\w.-]+)['"`]/.exec(args);
383 if (m) return m[1]!;
384 }
385 return null;
386}
387
388// =============================================================================
389// Response status

Callers 1

withShapeFunction · 0.85

Calls 1

execMethod · 0.65

Tested by

no test coverage detected