@vnodes/autowire 0.0.15 → 0.0.25

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.
Files changed (81) hide show
  1. package/README.md +3 -3
  2. package/bin/version.mjs +12 -0
  3. package/dist/index.d.ts +13 -7
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +16 -8
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/controller/autowire-method-name.d.ts +10 -0
  8. package/dist/lib/controller/autowire-method-name.d.ts.map +1 -0
  9. package/dist/lib/controller/autowire-method-name.js +3 -0
  10. package/dist/lib/controller/autowire-method-name.js.map +1 -0
  11. package/dist/lib/controller/autowire.d.ts +11 -0
  12. package/dist/lib/controller/autowire.d.ts.map +1 -0
  13. package/dist/lib/controller/autowire.js +61 -0
  14. package/dist/lib/controller/autowire.js.map +1 -0
  15. package/dist/lib/controller/method/common-method.d.ts +2 -0
  16. package/dist/lib/controller/method/common-method.d.ts.map +1 -0
  17. package/dist/lib/controller/method/common-method.js +24 -0
  18. package/dist/lib/controller/method/common-method.js.map +1 -0
  19. package/dist/lib/controller/method/create-one.d.ts +3 -0
  20. package/dist/lib/controller/method/create-one.d.ts.map +1 -0
  21. package/dist/lib/controller/method/create-one.js +20 -0
  22. package/dist/lib/controller/method/create-one.js.map +1 -0
  23. package/dist/lib/controller/method/delete-one-by-id.d.ts +3 -0
  24. package/dist/lib/controller/method/delete-one-by-id.d.ts.map +1 -0
  25. package/dist/lib/controller/method/delete-one-by-id.js +23 -0
  26. package/dist/lib/controller/method/delete-one-by-id.js.map +1 -0
  27. package/dist/lib/controller/method/find-many.d.ts +3 -0
  28. package/dist/lib/controller/method/find-many.d.ts.map +1 -0
  29. package/dist/lib/controller/method/find-many.js +25 -0
  30. package/dist/lib/controller/method/find-many.js.map +1 -0
  31. package/dist/lib/controller/method/find-one-by-id.d.ts +3 -0
  32. package/dist/lib/controller/method/find-one-by-id.d.ts.map +1 -0
  33. package/dist/lib/controller/method/find-one-by-id.js +23 -0
  34. package/dist/lib/controller/method/find-one-by-id.js.map +1 -0
  35. package/dist/lib/controller/method/update-one-by-id.d.ts +3 -0
  36. package/dist/lib/controller/method/update-one-by-id.d.ts.map +1 -0
  37. package/dist/lib/controller/method/update-one-by-id.js +23 -0
  38. package/dist/lib/controller/method/update-one-by-id.js.map +1 -0
  39. package/dist/lib/controller/params/body.d.ts +2 -0
  40. package/dist/lib/controller/params/body.d.ts.map +1 -0
  41. package/dist/lib/controller/params/body.js +8 -0
  42. package/dist/lib/controller/params/body.js.map +1 -0
  43. package/dist/lib/controller/params/param-id.d.ts +2 -0
  44. package/dist/lib/controller/params/param-id.d.ts.map +1 -0
  45. package/dist/lib/controller/params/param-id.js +8 -0
  46. package/dist/lib/controller/params/param-id.js.map +1 -0
  47. package/dist/lib/controller/params/param-uuid.d.ts +2 -0
  48. package/dist/lib/controller/params/param-uuid.d.ts.map +1 -0
  49. package/dist/lib/controller/params/param-uuid.js +8 -0
  50. package/dist/lib/controller/params/param-uuid.js.map +1 -0
  51. package/dist/lib/controller/params/query.d.ts +2 -0
  52. package/dist/lib/controller/params/query.d.ts.map +1 -0
  53. package/dist/lib/controller/params/query.js +8 -0
  54. package/dist/lib/controller/params/query.js.map +1 -0
  55. package/dist/lib/controller/params/user-id.d.ts +2 -0
  56. package/dist/lib/controller/params/user-id.d.ts.map +1 -0
  57. package/dist/lib/controller/params/user-id.js +7 -0
  58. package/dist/lib/controller/params/user-id.js.map +1 -0
  59. package/package.json +35 -25
  60. package/assets/favicon.png +0 -0
  61. package/dist/auto-controller-options.d.ts +0 -9
  62. package/dist/auto-controller-options.d.ts.map +0 -1
  63. package/dist/auto-controller-options.js +0 -1
  64. package/dist/auto-controller.d.ts +0 -3
  65. package/dist/auto-controller.d.ts.map +0 -1
  66. package/dist/auto-controller.js +0 -46
  67. package/dist/auto-delete.d.ts +0 -9
  68. package/dist/auto-delete.d.ts.map +0 -1
  69. package/dist/auto-delete.js +0 -41
  70. package/dist/auto-get.d.ts +0 -11
  71. package/dist/auto-get.d.ts.map +0 -1
  72. package/dist/auto-get.js +0 -54
  73. package/dist/auto-post.d.ts +0 -7
  74. package/dist/auto-post.d.ts.map +0 -1
  75. package/dist/auto-post.js +0 -28
  76. package/dist/auto-put.d.ts +0 -9
  77. package/dist/auto-put.d.ts.map +0 -1
  78. package/dist/auto-put.js +0 -40
  79. package/dist/helpers.d.ts +0 -5
  80. package/dist/helpers.d.ts.map +0 -1
  81. package/dist/helpers.js +0 -41
package/README.md CHANGED
@@ -5,12 +5,12 @@
5
5
  ![Bundle size](https://img.shields.io/bundlephobia/min/@vnodes/autowire)
6
6
 
7
7
  <p align="center">
8
- <img src="https://vnodes.github.io/vnodes/libs/autowire/assets/favicon.png" alt="Logo" width="200" height="200" style="border-radius: 100%"/>
8
+ <img srcset="./assets/favicon.png, https://vnodes.github.io/vnodes/libs/autowire/assets/favicon.png" alt="Logo" width="200" height="200" style="border-radius: 100%"/>
9
9
  </p>
10
10
 
11
11
  ## @vnodes/autowire
12
12
 
13
- Decorators that autowire resource controller and methods
13
+ Smart nestjs decorators.
14
14
 
15
15
  ## Installation
16
16
 
@@ -32,4 +32,4 @@ If you find my open-source contributions or the **@vnodes/autowire** project hel
32
32
  <a href="mailto:robert.brightline+vnodes-autowire@gmail.com">
33
33
  <img src="https://img.shields.io/badge/Email-D14836?style=for-the-badge&logo=gmail&logoColor=white" />
34
34
  </a>
35
- </p>
35
+ </p>
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { readFileSync } from 'node:fs';
4
+ import { dirname, join } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+
7
+ const __filename = fileURLToPath(import.meta.url);
8
+ const __dirname = dirname(__filename);
9
+ const packageJsonPath = join(__dirname, '..', 'package.json');
10
+ const packageJson = readFileSync(packageJsonPath, { encoding: 'utf-8' });
11
+ const version = JSON.parse(packageJson).version;
12
+ console.log(version);
package/dist/index.d.ts CHANGED
@@ -1,8 +1,14 @@
1
- export * from './auto-controller.js';
2
- export * from './auto-controller-options.js';
3
- export * from './auto-delete.js';
4
- export * from './auto-get.js';
5
- export * from './auto-post.js';
6
- export * from './auto-put.js';
7
- export * from './helpers.js';
1
+ export * from './lib/controller/autowire.js';
2
+ export * from './lib/controller/autowire-method-name.js';
3
+ export * from './lib/controller/method/common-method.js';
4
+ export * from './lib/controller/method/create-one.js';
5
+ export * from './lib/controller/method/delete-one-by-id.js';
6
+ export * from './lib/controller/method/find-many.js';
7
+ export * from './lib/controller/method/find-one-by-id.js';
8
+ export * from './lib/controller/method/update-one-by-id.js';
9
+ export * from './lib/controller/params/body.js';
10
+ export * from './lib/controller/params/param-id.js';
11
+ export * from './lib/controller/params/param-uuid.js';
12
+ export * from './lib/controller/params/query.js';
13
+ export * from './lib/controller/params/user-id.js';
8
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AACzD,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,sCAAsC,CAAC;AACrD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC"}
package/dist/index.js CHANGED
@@ -1,8 +1,16 @@
1
- // @index(['./**/*.ts', '!./**/*.spec.ts', '!./**/{main,serve,index}.ts', '!./**/prisma', '!./**/generated'], f => `export * from '${f.path}.js'`)
2
- export * from './auto-controller.js';
3
- export * from './auto-controller-options.js';
4
- export * from './auto-delete.js';
5
- export * from './auto-get.js';
6
- export * from './auto-post.js';
7
- export * from './auto-put.js';
8
- export * from './helpers.js';
1
+ // @index(['./**/*.ts', '!./**/*.{spec,test}.ts'], f => `export * from '${f.path}.js'`)
2
+ export * from './lib/controller/autowire.js';
3
+ export * from './lib/controller/autowire-method-name.js';
4
+ export * from './lib/controller/method/common-method.js';
5
+ export * from './lib/controller/method/create-one.js';
6
+ export * from './lib/controller/method/delete-one-by-id.js';
7
+ export * from './lib/controller/method/find-many.js';
8
+ export * from './lib/controller/method/find-one-by-id.js';
9
+ export * from './lib/controller/method/update-one-by-id.js';
10
+ export * from './lib/controller/params/body.js';
11
+ export * from './lib/controller/params/param-id.js';
12
+ export * from './lib/controller/params/param-uuid.js';
13
+ export * from './lib/controller/params/query.js';
14
+ export * from './lib/controller/params/user-id.js';
15
+
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// @index(['./**/*.ts', '!./**/*.{spec,test}.ts'], f => `export * from '${f.path}.js'`)\n\nexport * from './lib/controller/autowire.js';\nexport * from './lib/controller/autowire-method-name.js';\nexport * from './lib/controller/method/common-method.js';\nexport * from './lib/controller/method/create-one.js';\nexport * from './lib/controller/method/delete-one-by-id.js';\nexport * from './lib/controller/method/find-many.js';\nexport * from './lib/controller/method/find-one-by-id.js';\nexport * from './lib/controller/method/update-one-by-id.js';\nexport * from './lib/controller/params/body.js';\nexport * from './lib/controller/params/param-id.js';\nexport * from './lib/controller/params/param-uuid.js';\nexport * from './lib/controller/params/query.js';\nexport * from './lib/controller/params/user-id.js';\n"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,cAAc,+BAA+B;AAC7C,cAAc,2CAA2C;AACzD,cAAc,2CAA2C;AACzD,cAAc,wCAAwC;AACtD,cAAc,8CAA8C;AAC5D,cAAc,uCAAuC;AACrD,cAAc,4CAA4C;AAC1D,cAAc,8CAA8C;AAC5D,cAAc,kCAAkC;AAChD,cAAc,sCAAsC;AACpD,cAAc,wCAAwC;AACtD,cAAc,mCAAmC;AACjD,cAAc,qCAAqC"}
@@ -0,0 +1,10 @@
1
+ import type { Any } from '@vnodes/types';
2
+ export type AutowireMethodName = 'findMany' | 'findOneById' | 'createOne' | 'updateOneById' | 'deleteOneById';
3
+ export interface ResourceController<ID extends number | string = number> {
4
+ findMany(query: Any): Promise<Any>;
5
+ createOne(data: Any): Promise<Any>;
6
+ deleteOneById(id: ID): Promise<Any>;
7
+ findOneById(id: ID): Promise<Any>;
8
+ updateOneById(id: ID, data: Any): Promise<Any>;
9
+ }
10
+ //# sourceMappingURL=autowire-method-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autowire-method-name.d.ts","sourceRoot":"","sources":["../../../src/lib/controller/autowire-method-name.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,aAAa,GAAG,WAAW,GAAG,eAAe,GAAG,eAAe,CAAC;AAE9G,MAAM,WAAW,kBAAkB,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM;IACnE,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,aAAa,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CAClD"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=autowire-method-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/controller/autowire-method-name.ts"],"sourcesContent":["import type { Any } from '@vnodes/types';\n\nexport type AutowireMethodName = 'findMany' | 'findOneById' | 'createOne' | 'updateOneById' | 'deleteOneById';\n\nexport interface ResourceController<ID extends number | string = number> {\n findMany(query: Any): Promise<Any>;\n createOne(data: Any): Promise<Any>;\n deleteOneById(id: ID): Promise<Any>;\n findOneById(id: ID): Promise<Any>;\n updateOneById(id: ID, data: Any): Promise<Any>;\n}\n"],"names":[],"mappings":"AAIA,WAMC"}
@@ -0,0 +1,11 @@
1
+ import { type Type } from '@vnodes/nestjs/common';
2
+ export type AutowireOptions = {
3
+ readDto: Type;
4
+ };
5
+ /**
6
+ * Autowire rest controller and its methods {@link AutowireMethodName}
7
+ * @param options
8
+ * @returns
9
+ */
10
+ export declare function Autowire(options: AutowireOptions): ClassDecorator;
11
+ //# sourceMappingURL=autowire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autowire.d.ts","sourceRoot":"","sources":["../../../src/lib/controller/autowire.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAS9D,MAAM,MAAM,eAAe,GAAG;IAC1B,OAAO,EAAE,IAAI,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAuCjE"}
@@ -0,0 +1,61 @@
1
+ import { names, pluralize } from '@vnodes/names';
2
+ import { Controller } from '@vnodes/nestjs/common';
3
+ import { definedOrThrow, extractResourceName, getInheritedPropertyDescriptor, getMethodNames } from '@vnodes/utils';
4
+ import { CreateOne } from './method/create-one.js';
5
+ import { DeleteOneById } from './method/delete-one-by-id.js';
6
+ import { FindMany } from './method/find-many.js';
7
+ import { FindOneById } from './method/find-one-by-id.js';
8
+ import { UpdateOneById } from './method/update-one-by-id.js';
9
+ /**
10
+ * Autowire rest controller and its methods {@link AutowireMethodName}
11
+ * @param options
12
+ * @returns
13
+ */ export function Autowire(options) {
14
+ return (...args)=>{
15
+ const target = args[0];
16
+ const prototype = target.prototype;
17
+ const className = args[0].name;
18
+ const resourceName = extractResourceName(className);
19
+ const { kebab } = names(resourceName);
20
+ const PATH = pluralize(kebab);
21
+ Controller(PATH)(...args);
22
+ const methodNames = getMethodNames(target);
23
+ for (const methodName of methodNames){
24
+ const descriptor = definedOrThrow(getInheritedPropertyDescriptor(target, methodName));
25
+ const methodArgs = [
26
+ prototype,
27
+ methodName,
28
+ descriptor
29
+ ];
30
+ switch(methodName){
31
+ case 'findMany':
32
+ {
33
+ FindMany(resourceName, options.readDto)(...methodArgs);
34
+ break;
35
+ }
36
+ case 'findOneById':
37
+ {
38
+ FindOneById(resourceName, options.readDto)(...methodArgs);
39
+ break;
40
+ }
41
+ case 'createOne':
42
+ {
43
+ CreateOne(resourceName, options.readDto)(...methodArgs);
44
+ break;
45
+ }
46
+ case 'updateOneById':
47
+ {
48
+ UpdateOneById(resourceName, options.readDto)(...methodArgs);
49
+ break;
50
+ }
51
+ case 'deleteOneById':
52
+ {
53
+ DeleteOneById(resourceName, options.readDto)(...methodArgs);
54
+ break;
55
+ }
56
+ }
57
+ }
58
+ };
59
+ }
60
+
61
+ //# sourceMappingURL=autowire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/controller/autowire.ts"],"sourcesContent":["import { names, pluralize } from '@vnodes/names';\nimport { Controller, type Type } from '@vnodes/nestjs/common';\nimport { definedOrThrow, extractResourceName, getInheritedPropertyDescriptor, getMethodNames } from '@vnodes/utils';\nimport type { AutowireMethodName } from './autowire-method-name.js';\nimport { CreateOne } from './method/create-one.js';\nimport { DeleteOneById } from './method/delete-one-by-id.js';\nimport { FindMany } from './method/find-many.js';\nimport { FindOneById } from './method/find-one-by-id.js';\nimport { UpdateOneById } from './method/update-one-by-id.js';\n\nexport type AutowireOptions = {\n readDto: Type;\n};\n\n/**\n * Autowire rest controller and its methods {@link AutowireMethodName}\n * @param options\n * @returns\n */\nexport function Autowire(options: AutowireOptions): ClassDecorator {\n return (...args) => {\n const target = args[0];\n const prototype = target.prototype;\n const className = args[0].name;\n const resourceName = extractResourceName(className);\n const { kebab } = names(resourceName);\n const PATH = pluralize(kebab);\n Controller(PATH)(...args);\n\n const methodNames = getMethodNames(target);\n\n for (const methodName of methodNames) {\n const descriptor = definedOrThrow(getInheritedPropertyDescriptor(target, methodName));\n const methodArgs = [prototype, methodName, descriptor] as Parameters<MethodDecorator>;\n switch (methodName as AutowireMethodName) {\n case 'findMany': {\n FindMany(resourceName, options.readDto)(...methodArgs);\n break;\n }\n case 'findOneById': {\n FindOneById(resourceName, options.readDto)(...methodArgs);\n break;\n }\n case 'createOne': {\n CreateOne(resourceName, options.readDto)(...methodArgs);\n break;\n }\n case 'updateOneById': {\n UpdateOneById(resourceName, options.readDto)(...methodArgs);\n break;\n }\n case 'deleteOneById': {\n DeleteOneById(resourceName, options.readDto)(...methodArgs);\n break;\n }\n }\n }\n };\n}\n"],"names":["names","pluralize","Controller","definedOrThrow","extractResourceName","getInheritedPropertyDescriptor","getMethodNames","CreateOne","DeleteOneById","FindMany","FindOneById","UpdateOneById","Autowire","options","args","target","prototype","className","name","resourceName","kebab","PATH","methodNames","methodName","descriptor","methodArgs","readDto"],"mappings":"AAAA,SAASA,KAAK,EAAEC,SAAS,QAAQ,gBAAgB;AACjD,SAASC,UAAU,QAAmB,wBAAwB;AAC9D,SAASC,cAAc,EAAEC,mBAAmB,EAAEC,8BAA8B,EAAEC,cAAc,QAAQ,gBAAgB;AAEpH,SAASC,SAAS,QAAQ,yBAAyB;AACnD,SAASC,aAAa,QAAQ,+BAA+B;AAC7D,SAASC,QAAQ,QAAQ,wBAAwB;AACjD,SAASC,WAAW,QAAQ,6BAA6B;AACzD,SAASC,aAAa,QAAQ,+BAA+B;AAM7D;;;;CAIC,GACD,OAAO,SAASC,SAASC,OAAwB;IAC7C,OAAO,CAAC,GAAGC;QACP,MAAMC,SAASD,IAAI,CAAC,EAAE;QACtB,MAAME,YAAYD,OAAOC,SAAS;QAClC,MAAMC,YAAYH,IAAI,CAAC,EAAE,CAACI,IAAI;QAC9B,MAAMC,eAAef,oBAAoBa;QACzC,MAAM,EAAEG,KAAK,EAAE,GAAGpB,MAAMmB;QACxB,MAAME,OAAOpB,UAAUmB;QACvBlB,WAAWmB,SAASP;QAEpB,MAAMQ,cAAchB,eAAeS;QAEnC,KAAK,MAAMQ,cAAcD,YAAa;YAClC,MAAME,aAAarB,eAAeE,+BAA+BU,QAAQQ;YACzE,MAAME,aAAa;gBAACT;gBAAWO;gBAAYC;aAAW;YACtD,OAAQD;gBACJ,KAAK;oBAAY;wBACbd,SAASU,cAAcN,QAAQa,OAAO,KAAKD;wBAC3C;oBACJ;gBACA,KAAK;oBAAe;wBAChBf,YAAYS,cAAcN,QAAQa,OAAO,KAAKD;wBAC9C;oBACJ;gBACA,KAAK;oBAAa;wBACdlB,UAAUY,cAAcN,QAAQa,OAAO,KAAKD;wBAC5C;oBACJ;gBACA,KAAK;oBAAiB;wBAClBd,cAAcQ,cAAcN,QAAQa,OAAO,KAAKD;wBAChD;oBACJ;gBACA,KAAK;oBAAiB;wBAClBjB,cAAcW,cAAcN,QAAQa,OAAO,KAAKD;wBAChD;oBACJ;YACJ;QACJ;IACJ;AACJ"}
@@ -0,0 +1,2 @@
1
+ export declare function CommonMethod(): MethodDecorator;
2
+ //# sourceMappingURL=common-method.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-method.d.ts","sourceRoot":"","sources":["../../../../src/lib/controller/method/common-method.ts"],"names":[],"mappings":"AAQA,wBAAgB,YAAY,IAAI,eAAe,CAc9C"}
@@ -0,0 +1,24 @@
1
+ import { ApiForbiddenResponse, ApiInternalServerErrorResponse, ApiRequestTimeoutResponse, ApiUnauthorizedResponse, ApiUnprocessableEntityResponse } from '@vnodes/nestjs/swagger';
2
+ export function CommonMethod() {
3
+ return (...args)=>{
4
+ [
5
+ ApiInternalServerErrorResponse({
6
+ description: 'Something unkown went wrong'
7
+ }),
8
+ ApiUnprocessableEntityResponse({
9
+ description: 'Your input or query is invalid'
10
+ }),
11
+ ApiRequestTimeoutResponse({
12
+ description: 'Request exceed the defined timeout limit'
13
+ }),
14
+ ApiUnauthorizedResponse({
15
+ description: 'You are not autorized'
16
+ }),
17
+ ApiForbiddenResponse({
18
+ description: 'You do not have sufficient priviledges to access this resource'
19
+ })
20
+ ].map((d)=>d(...args));
21
+ };
22
+ }
23
+
24
+ //# sourceMappingURL=common-method.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/controller/method/common-method.ts"],"sourcesContent":["import {\n ApiForbiddenResponse,\n ApiInternalServerErrorResponse,\n ApiRequestTimeoutResponse,\n ApiUnauthorizedResponse,\n ApiUnprocessableEntityResponse,\n} from '@vnodes/nestjs/swagger';\n\nexport function CommonMethod(): MethodDecorator {\n return (...args) => {\n [\n ApiInternalServerErrorResponse({ description: 'Something unkown went wrong' }),\n ApiUnprocessableEntityResponse({ description: 'Your input or query is invalid' }),\n ApiRequestTimeoutResponse({ description: 'Request exceed the defined timeout limit' }),\n ApiUnauthorizedResponse({\n description: 'You are not autorized',\n }),\n ApiForbiddenResponse({\n description: 'You do not have sufficient priviledges to access this resource',\n }),\n ].map((d) => d(...args));\n };\n}\n"],"names":["ApiForbiddenResponse","ApiInternalServerErrorResponse","ApiRequestTimeoutResponse","ApiUnauthorizedResponse","ApiUnprocessableEntityResponse","CommonMethod","args","description","map","d"],"mappings":"AAAA,SACIA,oBAAoB,EACpBC,8BAA8B,EAC9BC,yBAAyB,EACzBC,uBAAuB,EACvBC,8BAA8B,QAC3B,yBAAyB;AAEhC,OAAO,SAASC;IACZ,OAAO,CAAC,GAAGC;QACP;YACIL,+BAA+B;gBAAEM,aAAa;YAA8B;YAC5EH,+BAA+B;gBAAEG,aAAa;YAAiC;YAC/EL,0BAA0B;gBAAEK,aAAa;YAA2C;YACpFJ,wBAAwB;gBACpBI,aAAa;YACjB;YACAP,qBAAqB;gBACjBO,aAAa;YACjB;SACH,CAACC,GAAG,CAAC,CAACC,IAAMA,KAAKH;IACtB;AACJ"}
@@ -0,0 +1,3 @@
1
+ import { type Type } from '@vnodes/nestjs/common';
2
+ export declare function CreateOne(resourceName: string, dto: Type): MethodDecorator;
3
+ //# sourceMappingURL=create-one.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-one.d.ts","sourceRoot":"","sources":["../../../../src/lib/controller/method/create-one.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAIxD,wBAAgB,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,eAAe,CAS1E"}
@@ -0,0 +1,20 @@
1
+ import { Post } from '@vnodes/nestjs/common';
2
+ import { ApiCreatedResponse, ApiOperation } from '@vnodes/nestjs/swagger';
3
+ import { CommonMethod } from './common-method.js';
4
+ export function CreateOne(resourceName, dto) {
5
+ return (...args)=>{
6
+ [
7
+ Post(),
8
+ ApiOperation({
9
+ summary: `Create one ${resourceName}`
10
+ }),
11
+ ApiCreatedResponse({
12
+ type: dto,
13
+ description: 'Found item'
14
+ }),
15
+ CommonMethod()
16
+ ].map((d)=>d(...args));
17
+ };
18
+ }
19
+
20
+ //# sourceMappingURL=create-one.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/controller/method/create-one.ts"],"sourcesContent":["import { Post, type Type } from '@vnodes/nestjs/common';\nimport { ApiCreatedResponse, ApiOperation } from '@vnodes/nestjs/swagger';\nimport { CommonMethod } from './common-method.js';\n\nexport function CreateOne(resourceName: string, dto: Type): MethodDecorator {\n return (...args) => {\n [\n Post(),\n ApiOperation({ summary: `Create one ${resourceName}` }),\n ApiCreatedResponse({ type: dto, description: 'Found item' }),\n CommonMethod(),\n ].map((d) => d(...args));\n };\n}\n"],"names":["Post","ApiCreatedResponse","ApiOperation","CommonMethod","CreateOne","resourceName","dto","args","summary","type","description","map","d"],"mappings":"AAAA,SAASA,IAAI,QAAmB,wBAAwB;AACxD,SAASC,kBAAkB,EAAEC,YAAY,QAAQ,yBAAyB;AAC1E,SAASC,YAAY,QAAQ,qBAAqB;AAElD,OAAO,SAASC,UAAUC,YAAoB,EAAEC,GAAS;IACrD,OAAO,CAAC,GAAGC;QACP;YACIP;YACAE,aAAa;gBAAEM,SAAS,CAAC,WAAW,EAAEH,cAAc;YAAC;YACrDJ,mBAAmB;gBAAEQ,MAAMH;gBAAKI,aAAa;YAAa;YAC1DP;SACH,CAACQ,GAAG,CAAC,CAACC,IAAMA,KAAKL;IACtB;AACJ"}
@@ -0,0 +1,3 @@
1
+ import { type Type } from '@vnodes/nestjs/common';
2
+ export declare function DeleteOneById(resourceName: string, dto: Type): MethodDecorator;
3
+ //# sourceMappingURL=delete-one-by-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-one-by-id.d.ts","sourceRoot":"","sources":["../../../../src/lib/controller/method/delete-one-by-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAI1D,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,eAAe,CAU9E"}
@@ -0,0 +1,23 @@
1
+ import { Delete } from '@vnodes/nestjs/common';
2
+ import { ApiNotFoundResponse, ApiOkResponse, ApiOperation } from '@vnodes/nestjs/swagger';
3
+ import { CommonMethod } from './common-method.js';
4
+ export function DeleteOneById(resourceName, dto) {
5
+ return (...args)=>{
6
+ [
7
+ Delete(':id'),
8
+ ApiOperation({
9
+ summary: `Delete one ${resourceName} by primary id`
10
+ }),
11
+ ApiOkResponse({
12
+ type: dto,
13
+ description: 'Deleted item'
14
+ }),
15
+ ApiNotFoundResponse({
16
+ description: 'Not found'
17
+ }),
18
+ CommonMethod()
19
+ ].map((d)=>d(...args));
20
+ };
21
+ }
22
+
23
+ //# sourceMappingURL=delete-one-by-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/controller/method/delete-one-by-id.ts"],"sourcesContent":["import { Delete, type Type } from '@vnodes/nestjs/common';\nimport { ApiNotFoundResponse, ApiOkResponse, ApiOperation } from '@vnodes/nestjs/swagger';\nimport { CommonMethod } from './common-method.js';\n\nexport function DeleteOneById(resourceName: string, dto: Type): MethodDecorator {\n return (...args) => {\n [\n Delete(':id'),\n ApiOperation({ summary: `Delete one ${resourceName} by primary id` }),\n ApiOkResponse({ type: dto, description: 'Deleted item' }),\n ApiNotFoundResponse({ description: 'Not found' }),\n CommonMethod(),\n ].map((d) => d(...args));\n };\n}\n"],"names":["Delete","ApiNotFoundResponse","ApiOkResponse","ApiOperation","CommonMethod","DeleteOneById","resourceName","dto","args","summary","type","description","map","d"],"mappings":"AAAA,SAASA,MAAM,QAAmB,wBAAwB;AAC1D,SAASC,mBAAmB,EAAEC,aAAa,EAAEC,YAAY,QAAQ,yBAAyB;AAC1F,SAASC,YAAY,QAAQ,qBAAqB;AAElD,OAAO,SAASC,cAAcC,YAAoB,EAAEC,GAAS;IACzD,OAAO,CAAC,GAAGC;QACP;YACIR,OAAO;YACPG,aAAa;gBAAEM,SAAS,CAAC,WAAW,EAAEH,aAAa,cAAc,CAAC;YAAC;YACnEJ,cAAc;gBAAEQ,MAAMH;gBAAKI,aAAa;YAAe;YACvDV,oBAAoB;gBAAEU,aAAa;YAAY;YAC/CP;SACH,CAACQ,GAAG,CAAC,CAACC,IAAMA,KAAKL;IACtB;AACJ"}
@@ -0,0 +1,3 @@
1
+ import { type Type } from '@vnodes/nestjs/common';
2
+ export declare function FindMany(resourceName: string, dto: Type): MethodDecorator;
3
+ //# sourceMappingURL=find-many.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-many.d.ts","sourceRoot":"","sources":["../../../../src/lib/controller/method/find-many.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAIvD,wBAAgB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,eAAe,CAUzE"}
@@ -0,0 +1,25 @@
1
+ import { Get } from '@vnodes/nestjs/common';
2
+ import { ApiNotFoundResponse, ApiOkResponse, ApiOperation } from '@vnodes/nestjs/swagger';
3
+ import { CommonMethod } from './common-method.js';
4
+ export function FindMany(resourceName, dto) {
5
+ return (...args)=>{
6
+ [
7
+ Get(),
8
+ ApiOperation({
9
+ summary: `Find many ${resourceName} by advance query and pagination`
10
+ }),
11
+ ApiOkResponse({
12
+ type: [
13
+ dto
14
+ ],
15
+ description: 'Found items'
16
+ }),
17
+ ApiNotFoundResponse({
18
+ description: 'No matching items'
19
+ }),
20
+ CommonMethod()
21
+ ].map((d)=>d(...args));
22
+ };
23
+ }
24
+
25
+ //# sourceMappingURL=find-many.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/controller/method/find-many.ts"],"sourcesContent":["import { Get, type Type } from '@vnodes/nestjs/common';\nimport { ApiNotFoundResponse, ApiOkResponse, ApiOperation } from '@vnodes/nestjs/swagger';\nimport { CommonMethod } from './common-method.js';\n\nexport function FindMany(resourceName: string, dto: Type): MethodDecorator {\n return (...args) => {\n [\n Get(),\n ApiOperation({ summary: `Find many ${resourceName} by advance query and pagination` }),\n ApiOkResponse({ type: [dto], description: 'Found items' }),\n ApiNotFoundResponse({ description: 'No matching items' }),\n CommonMethod(),\n ].map((d) => d(...args));\n };\n}\n"],"names":["Get","ApiNotFoundResponse","ApiOkResponse","ApiOperation","CommonMethod","FindMany","resourceName","dto","args","summary","type","description","map","d"],"mappings":"AAAA,SAASA,GAAG,QAAmB,wBAAwB;AACvD,SAASC,mBAAmB,EAAEC,aAAa,EAAEC,YAAY,QAAQ,yBAAyB;AAC1F,SAASC,YAAY,QAAQ,qBAAqB;AAElD,OAAO,SAASC,SAASC,YAAoB,EAAEC,GAAS;IACpD,OAAO,CAAC,GAAGC;QACP;YACIR;YACAG,aAAa;gBAAEM,SAAS,CAAC,UAAU,EAAEH,aAAa,gCAAgC,CAAC;YAAC;YACpFJ,cAAc;gBAAEQ,MAAM;oBAACH;iBAAI;gBAAEI,aAAa;YAAc;YACxDV,oBAAoB;gBAAEU,aAAa;YAAoB;YACvDP;SACH,CAACQ,GAAG,CAAC,CAACC,IAAMA,KAAKL;IACtB;AACJ"}
@@ -0,0 +1,3 @@
1
+ import { type Type } from '@vnodes/nestjs/common';
2
+ export declare function FindOneById(resourceName: string, dto: Type): MethodDecorator;
3
+ //# sourceMappingURL=find-one-by-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-one-by-id.d.ts","sourceRoot":"","sources":["../../../../src/lib/controller/method/find-one-by-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAIvD,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,eAAe,CAU5E"}
@@ -0,0 +1,23 @@
1
+ import { Get } from '@vnodes/nestjs/common';
2
+ import { ApiNotFoundResponse, ApiOkResponse, ApiOperation } from '@vnodes/nestjs/swagger';
3
+ import { CommonMethod } from './common-method.js';
4
+ export function FindOneById(resourceName, dto) {
5
+ return (...args)=>{
6
+ [
7
+ Get(':id'),
8
+ ApiOperation({
9
+ summary: `Find one ${resourceName} by primary id`
10
+ }),
11
+ ApiOkResponse({
12
+ type: dto,
13
+ description: 'Found item'
14
+ }),
15
+ ApiNotFoundResponse({
16
+ description: 'Not found'
17
+ }),
18
+ CommonMethod()
19
+ ].map((d)=>d(...args));
20
+ };
21
+ }
22
+
23
+ //# sourceMappingURL=find-one-by-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/controller/method/find-one-by-id.ts"],"sourcesContent":["import { Get, type Type } from '@vnodes/nestjs/common';\nimport { ApiNotFoundResponse, ApiOkResponse, ApiOperation } from '@vnodes/nestjs/swagger';\nimport { CommonMethod } from './common-method.js';\n\nexport function FindOneById(resourceName: string, dto: Type): MethodDecorator {\n return (...args) => {\n [\n Get(':id'),\n ApiOperation({ summary: `Find one ${resourceName} by primary id` }),\n ApiOkResponse({ type: dto, description: 'Found item' }),\n ApiNotFoundResponse({ description: 'Not found' }),\n CommonMethod(),\n ].map((d) => d(...args));\n };\n}\n"],"names":["Get","ApiNotFoundResponse","ApiOkResponse","ApiOperation","CommonMethod","FindOneById","resourceName","dto","args","summary","type","description","map","d"],"mappings":"AAAA,SAASA,GAAG,QAAmB,wBAAwB;AACvD,SAASC,mBAAmB,EAAEC,aAAa,EAAEC,YAAY,QAAQ,yBAAyB;AAC1F,SAASC,YAAY,QAAQ,qBAAqB;AAElD,OAAO,SAASC,YAAYC,YAAoB,EAAEC,GAAS;IACvD,OAAO,CAAC,GAAGC;QACP;YACIR,IAAI;YACJG,aAAa;gBAAEM,SAAS,CAAC,SAAS,EAAEH,aAAa,cAAc,CAAC;YAAC;YACjEJ,cAAc;gBAAEQ,MAAMH;gBAAKI,aAAa;YAAa;YACrDV,oBAAoB;gBAAEU,aAAa;YAAY;YAC/CP;SACH,CAACQ,GAAG,CAAC,CAACC,IAAMA,KAAKL;IACtB;AACJ"}
@@ -0,0 +1,3 @@
1
+ import { type Type } from '@vnodes/nestjs/common';
2
+ export declare function UpdateOneById(resourceName: string, dto: Type): MethodDecorator;
3
+ //# sourceMappingURL=update-one-by-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-one-by-id.d.ts","sourceRoot":"","sources":["../../../../src/lib/controller/method/update-one-by-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAIvD,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,eAAe,CAU9E"}
@@ -0,0 +1,23 @@
1
+ import { Put } from '@vnodes/nestjs/common';
2
+ import { ApiNotFoundResponse, ApiOkResponse, ApiOperation } from '@vnodes/nestjs/swagger';
3
+ import { CommonMethod } from './common-method.js';
4
+ export function UpdateOneById(resourceName, dto) {
5
+ return (...args)=>{
6
+ [
7
+ Put(':id'),
8
+ ApiOperation({
9
+ summary: `Update one ${resourceName} by primary id`
10
+ }),
11
+ ApiOkResponse({
12
+ type: dto,
13
+ description: 'Updated item'
14
+ }),
15
+ ApiNotFoundResponse({
16
+ description: 'Not found'
17
+ }),
18
+ CommonMethod()
19
+ ].map((d)=>d(...args));
20
+ };
21
+ }
22
+
23
+ //# sourceMappingURL=update-one-by-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/controller/method/update-one-by-id.ts"],"sourcesContent":["import { Put, type Type } from '@vnodes/nestjs/common';\nimport { ApiNotFoundResponse, ApiOkResponse, ApiOperation } from '@vnodes/nestjs/swagger';\nimport { CommonMethod } from './common-method.js';\n\nexport function UpdateOneById(resourceName: string, dto: Type): MethodDecorator {\n return (...args) => {\n [\n Put(':id'),\n ApiOperation({ summary: `Update one ${resourceName} by primary id` }),\n ApiOkResponse({ type: dto, description: 'Updated item' }),\n ApiNotFoundResponse({ description: 'Not found' }),\n CommonMethod(),\n ].map((d) => d(...args));\n };\n}\n"],"names":["Put","ApiNotFoundResponse","ApiOkResponse","ApiOperation","CommonMethod","UpdateOneById","resourceName","dto","args","summary","type","description","map","d"],"mappings":"AAAA,SAASA,GAAG,QAAmB,wBAAwB;AACvD,SAASC,mBAAmB,EAAEC,aAAa,EAAEC,YAAY,QAAQ,yBAAyB;AAC1F,SAASC,YAAY,QAAQ,qBAAqB;AAElD,OAAO,SAASC,cAAcC,YAAoB,EAAEC,GAAS;IACzD,OAAO,CAAC,GAAGC;QACP;YACIR,IAAI;YACJG,aAAa;gBAAEM,SAAS,CAAC,WAAW,EAAEH,aAAa,cAAc,CAAC;YAAC;YACnEJ,cAAc;gBAAEQ,MAAMH;gBAAKI,aAAa;YAAe;YACvDV,oBAAoB;gBAAEU,aAAa;YAAY;YAC/CP;SACH,CAACQ,GAAG,CAAC,CAACC,IAAMA,KAAKL;IACtB;AACJ"}
@@ -0,0 +1,2 @@
1
+ export declare function Body(): ParameterDecorator;
2
+ //# sourceMappingURL=body.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body.d.ts","sourceRoot":"","sources":["../../../../src/lib/controller/params/body.ts"],"names":[],"mappings":"AAEA,wBAAgB,IAAI,IAAI,kBAAkB,CAIzC"}
@@ -0,0 +1,8 @@
1
+ import { Body as NestBody } from '@vnodes/nestjs/common';
2
+ export function Body() {
3
+ return (...args)=>{
4
+ NestBody()(...args);
5
+ };
6
+ }
7
+
8
+ //# sourceMappingURL=body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/controller/params/body.ts"],"sourcesContent":["import { Body as NestBody } from '@vnodes/nestjs/common';\n\nexport function Body(): ParameterDecorator {\n return (...args) => {\n NestBody()(...args);\n };\n}\n"],"names":["Body","NestBody","args"],"mappings":"AAAA,SAASA,QAAQC,QAAQ,QAAQ,wBAAwB;AAEzD,OAAO,SAASD;IACZ,OAAO,CAAC,GAAGE;QACPD,cAAcC;IAClB;AACJ"}
@@ -0,0 +1,2 @@
1
+ export declare function ParamID(): ParameterDecorator;
2
+ //# sourceMappingURL=param-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"param-id.d.ts","sourceRoot":"","sources":["../../../../src/lib/controller/params/param-id.ts"],"names":[],"mappings":"AAEA,wBAAgB,OAAO,IAAI,kBAAkB,CAI5C"}
@@ -0,0 +1,8 @@
1
+ import { Param, ParseIntPipe } from '@vnodes/nestjs/common';
2
+ export function ParamID() {
3
+ return (...args)=>{
4
+ Param('id', ParseIntPipe)(...args);
5
+ };
6
+ }
7
+
8
+ //# sourceMappingURL=param-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/controller/params/param-id.ts"],"sourcesContent":["import { Param, ParseIntPipe } from '@vnodes/nestjs/common';\n\nexport function ParamID(): ParameterDecorator {\n return (...args) => {\n Param('id', ParseIntPipe)(...args);\n };\n}\n"],"names":["Param","ParseIntPipe","ParamID","args"],"mappings":"AAAA,SAASA,KAAK,EAAEC,YAAY,QAAQ,wBAAwB;AAE5D,OAAO,SAASC;IACZ,OAAO,CAAC,GAAGC;QACPH,MAAM,MAAMC,iBAAiBE;IACjC;AACJ"}
@@ -0,0 +1,2 @@
1
+ export declare function ParamUuid(): ParameterDecorator;
2
+ //# sourceMappingURL=param-uuid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"param-uuid.d.ts","sourceRoot":"","sources":["../../../../src/lib/controller/params/param-uuid.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,IAAI,kBAAkB,CAI9C"}
@@ -0,0 +1,8 @@
1
+ import { Param, ParseUUIDPipe } from '@vnodes/nestjs/common';
2
+ export function ParamUuid() {
3
+ return (...args)=>{
4
+ Param('id', ParseUUIDPipe)(...args);
5
+ };
6
+ }
7
+
8
+ //# sourceMappingURL=param-uuid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/controller/params/param-uuid.ts"],"sourcesContent":["import { Param, ParseUUIDPipe } from '@vnodes/nestjs/common';\n\nexport function ParamUuid(): ParameterDecorator {\n return (...args) => {\n Param('id', ParseUUIDPipe)(...args);\n };\n}\n"],"names":["Param","ParseUUIDPipe","ParamUuid","args"],"mappings":"AAAA,SAASA,KAAK,EAAEC,aAAa,QAAQ,wBAAwB;AAE7D,OAAO,SAASC;IACZ,OAAO,CAAC,GAAGC;QACPH,MAAM,MAAMC,kBAAkBE;IAClC;AACJ"}
@@ -0,0 +1,2 @@
1
+ export declare function Query(): ParameterDecorator;
2
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../src/lib/controller/params/query.ts"],"names":[],"mappings":"AAEA,wBAAgB,KAAK,IAAI,kBAAkB,CAI1C"}
@@ -0,0 +1,8 @@
1
+ import { Query as NestQuery } from '@vnodes/nestjs/common';
2
+ export function Query() {
3
+ return (...args)=>{
4
+ NestQuery()(...args);
5
+ };
6
+ }
7
+
8
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/controller/params/query.ts"],"sourcesContent":["import { Query as NestQuery } from '@vnodes/nestjs/common';\n\nexport function Query(): ParameterDecorator {\n return (...args) => {\n NestQuery()(...args);\n };\n}\n"],"names":["Query","NestQuery","args"],"mappings":"AAAA,SAASA,SAASC,SAAS,QAAQ,wBAAwB;AAE3D,OAAO,SAASD;IACZ,OAAO,CAAC,GAAGE;QACPD,eAAeC;IACnB;AACJ"}
@@ -0,0 +1,2 @@
1
+ export declare const UserId: (...dataOrPipes: any[]) => ParameterDecorator;
2
+ //# sourceMappingURL=user-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-id.d.ts","sourceRoot":"","sources":["../../../../src/lib/controller/params/user-id.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM,+CAEjB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { createParamDecorator } from '@vnodes/nestjs/common';
2
+ import { definedOrThrow } from '@vnodes/utils';
3
+ export const UserId = createParamDecorator((_, context)=>{
4
+ return definedOrThrow(context.switchToHttp().getRequest().user.id);
5
+ });
6
+
7
+ //# sourceMappingURL=user-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/lib/controller/params/user-id.ts"],"sourcesContent":["import { createParamDecorator } from '@vnodes/nestjs/common';\nimport { definedOrThrow } from '@vnodes/utils';\n\nexport const UserId = createParamDecorator((_, context) => {\n return definedOrThrow(context.switchToHttp().getRequest().user.id);\n});\n"],"names":["createParamDecorator","definedOrThrow","UserId","_","context","switchToHttp","getRequest","user","id"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,wBAAwB;AAC7D,SAASC,cAAc,QAAQ,gBAAgB;AAE/C,OAAO,MAAMC,SAASF,qBAAqB,CAACG,GAAGC;IAC3C,OAAOH,eAAeG,QAAQC,YAAY,GAAGC,UAAU,GAAGC,IAAI,CAACC,EAAE;AACrE,GAAG"}
package/package.json CHANGED
@@ -1,25 +1,23 @@
1
1
  {
2
2
  "name": "@vnodes/autowire",
3
- "description": "Decorators that autowire resource controller and methods",
4
- "homepage": "https://vnodes.github.io/vnodes/libs/autowire",
5
- "publishConfig": {
6
- "access": "public",
7
- "tag": "latest"
8
- },
3
+ "version": "0.0.25",
4
+ "description": "@vnodes/autowire",
5
+ "keywords": [
6
+ "autowire"
7
+ ],
9
8
  "author": {
10
- "email": "robert.brightline+vnodes-autowire@gmail.com",
11
9
  "name": "Robert Brightline",
12
- "url": "https://vnodes.github.io/vnodes/libs/autowire"
10
+ "email": "robert.brightline+vnodes-autowire@gmail.com",
11
+ "url": "https://vnodes.github.io/vnodes"
13
12
  },
14
- "keywords": [],
13
+ "homepage": "https://vnodes.github.io/vnodes/libs/autowire",
15
14
  "icon": "https://vnodes.github.io/vnodes/libs/autowire/assets/favicon.png",
16
15
  "funding": [
17
- {
18
- "type": "cashapp",
19
- "url": "https://cash.app/$puqlib"
20
- }
16
+ "https://cash.app/$puqlib"
21
17
  ],
22
- "version": "0.0.15",
18
+ "bin": {
19
+ "version": "./bin/version.mjs"
20
+ },
23
21
  "type": "module",
24
22
  "main": "./dist/index.js",
25
23
  "module": "./dist/index.js",
@@ -34,30 +32,42 @@
34
32
  }
35
33
  },
36
34
  "files": [
37
- "assets",
38
35
  "dist",
36
+ "bin",
39
37
  "!**/*.tsbuildinfo"
40
38
  ],
41
39
  "nx": {
42
40
  "sourceRoot": "libs/autowire/src",
41
+ "tags": [
42
+ "lib"
43
+ ],
43
44
  "targets": {
44
45
  "build": {},
45
- "lint": {},
46
- "test": {},
47
- "doc": {}
46
+ "doc": {},
47
+ "lint": {}
48
48
  }
49
49
  },
50
50
  "dependencies": {
51
- "@swc/helpers": "~0.5.11"
51
+ "@swc/helpers": "~0.5.18"
52
52
  },
53
53
  "devDependencies": {
54
- "@nestjs/testing": "^11.1.13"
54
+ "@vnodes/errors": "0.0.25",
55
+ "@vnodes/metadata": "0.0.25",
56
+ "@vnodes/names": "0.0.25",
57
+ "@vnodes/nestjs": "0.0.25",
58
+ "@vnodes/types": "0.0.25",
59
+ "@vnodes/utils": "0.0.25"
55
60
  },
56
61
  "peerDependencies": {
57
- "@nestjs/common": "^11.1.14",
58
- "@nestjs/core": "^11.1.14",
59
- "@nestjs/swagger": "^11.2.6",
60
- "@vnodes/metadata": "0.0.15",
61
- "@vnodes/names": "0.0.15"
62
+ "@vnodes/names": "0.0.25",
63
+ "@vnodes/errors": "0.0.25",
64
+ "@vnodes/nestjs": "0.0.25",
65
+ "@vnodes/metadata": "0.0.25",
66
+ "@vnodes/types": "0.0.25",
67
+ "@vnodes/utils": "0.0.25"
68
+ },
69
+ "publishConfig": {
70
+ "access": "public",
71
+ "tag": "latest"
62
72
  }
63
73
  }
Binary file
@@ -1,9 +0,0 @@
1
- import { Type } from '@nestjs/common';
2
- export type AutoControllerOptions = {
3
- createDto: Type;
4
- updateDto: Type;
5
- queryDto: Type;
6
- readDto: Type;
7
- emit?: boolean;
8
- };
9
- //# sourceMappingURL=auto-controller-options.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto-controller-options.d.ts","sourceRoot":"","sources":["../src/auto-controller-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,MAAM,MAAM,qBAAqB,GAAG;IAChC,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,IAAI,CAAC;IACf,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,3 +0,0 @@
1
- import { AutoControllerOptions } from './auto-controller-options.js';
2
- export declare function AutoController(options: AutoControllerOptions): ClassDecorator;
3
- //# sourceMappingURL=auto-controller.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto-controller.d.ts","sourceRoot":"","sources":["../src/auto-controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAOrE,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAkC7E"}
@@ -1,46 +0,0 @@
1
- import { Controller } from '@nestjs/common';
2
- import { ApiBearerAuth } from '@nestjs/swagger';
3
- import { OperationName, operationRegistry, ResourceName } from '@vnodes/metadata';
4
- import { names, pluralize } from '@vnodes/names';
5
- import { AutoDelete } from './auto-delete.js';
6
- import { AutoGet } from './auto-get.js';
7
- import { AutoPost } from './auto-post.js';
8
- import { AutoPut } from './auto-put.js';
9
- import { getAllMethodNames, getInheritedPropertyDescriptor } from './helpers.js';
10
- export function AutoController(options) {
11
- return (target) => {
12
- const className = target.name;
13
- const { pascalCase: resourceName, kebabCase } = names(className.replace('Controller', ''));
14
- const pluralPath = pluralize(kebabCase);
15
- Controller(pluralPath)(target);
16
- ResourceName(resourceName)(target);
17
- ApiBearerAuth()(target);
18
- const methodNames = getAllMethodNames(target).filter((e) => e !== 'constructor');
19
- for (const operationName of methodNames) {
20
- const descriptor = getInheritedPropertyDescriptor(target, operationName);
21
- if (!descriptor)
22
- throw new Error(`Descriptor not found for ${target.name}.${operationName}`);
23
- const args = [target.prototype, operationName, descriptor];
24
- OperationName(operationName)(...args);
25
- operationRegistry.add({
26
- resourceName,
27
- operationName,
28
- });
29
- if (operationName.startsWith('find')) {
30
- AutoGet(options)(...args);
31
- }
32
- else if (operationName.startsWith('create')) {
33
- AutoPost(options)(...args);
34
- }
35
- else if (operationName.startsWith('update')) {
36
- AutoPut(options)(...args);
37
- }
38
- else if (operationName.startsWith('delete')) {
39
- AutoDelete(options)(...args);
40
- }
41
- else {
42
- throw new Error('Method is not supported');
43
- }
44
- }
45
- };
46
- }
@@ -1,9 +0,0 @@
1
- import { AutoControllerOptions } from './auto-controller-options.js';
2
- export declare enum DeleteMethodName {
3
- deleteOneById = "deleteOneById",
4
- deleteOneByUuid = "deleteOneByUuid"
5
- }
6
- export declare function __DeleteOneByIdMethod(): MethodDecorator;
7
- export declare function __DeleteOneByUuid(): MethodDecorator;
8
- export declare function AutoDelete(options: AutoControllerOptions): MethodDecorator;
9
- //# sourceMappingURL=auto-delete.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto-delete.d.ts","sourceRoot":"","sources":["../src/auto-delete.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,oBAAY,gBAAgB;IACxB,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;CACtC;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CAIvD;AAED,wBAAgB,iBAAiB,IAAI,eAAe,CAInD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,qBAAqB,GAAG,eAAe,CAyB1E"}
@@ -1,41 +0,0 @@
1
- import { Delete, Param, ParseIntPipe } from '@nestjs/common';
2
- import { ApiOkResponse } from '@nestjs/swagger';
3
- export var DeleteMethodName;
4
- (function (DeleteMethodName) {
5
- DeleteMethodName["deleteOneById"] = "deleteOneById";
6
- DeleteMethodName["deleteOneByUuid"] = "deleteOneByUuid";
7
- })(DeleteMethodName || (DeleteMethodName = {}));
8
- export function __DeleteOneByIdMethod() {
9
- return (...args) => {
10
- Delete(':id')(...args);
11
- };
12
- }
13
- export function __DeleteOneByUuid() {
14
- return (...args) => {
15
- Delete(':uuid')(...args);
16
- };
17
- }
18
- export function AutoDelete(options) {
19
- return (...args) => {
20
- const methodName = args[1].toString();
21
- switch (methodName.toString()) {
22
- case DeleteMethodName.deleteOneById: {
23
- __DeleteOneByIdMethod()(...args);
24
- ApiOkResponse({ type: options.readDto })(...args);
25
- Param('id', ParseIntPipe)(args[0], args[1], 0);
26
- Reflect.defineMetadata('design:paramtypes', [Number], args[0], args[1]);
27
- break;
28
- }
29
- case DeleteMethodName.deleteOneByUuid: {
30
- __DeleteOneByUuid()(...args);
31
- ApiOkResponse({ type: options.readDto })(...args);
32
- Param('uuid')(args[0], args[1], 0);
33
- Reflect.defineMetadata('design:paramtypes', [String], args[0], args[1]);
34
- break;
35
- }
36
- default: {
37
- throw new Error(`${methodName.toString()} is not supported`);
38
- }
39
- }
40
- };
41
- }
@@ -1,11 +0,0 @@
1
- import { AutoControllerOptions } from './auto-controller-options.js';
2
- export declare enum FindMethodName {
3
- findMany = "findMany",
4
- findOneById = "findOneById",
5
- findOneByUuid = "findOneByUuid"
6
- }
7
- export declare function __FindMethod(): MethodDecorator;
8
- export declare function __FindOneByIdMethod(): MethodDecorator;
9
- export declare function __FindOneByUuid(): MethodDecorator;
10
- export declare function AutoGet(options: AutoControllerOptions): MethodDecorator;
11
- //# sourceMappingURL=auto-get.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto-get.d.ts","sourceRoot":"","sources":["../src/auto-get.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,oBAAY,cAAc;IACtB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;CAClC;AAED,wBAAgB,YAAY,IAAI,eAAe,CAI9C;AACD,wBAAgB,mBAAmB,IAAI,eAAe,CAIrD;AAED,wBAAgB,eAAe,IAAI,eAAe,CAIjD;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,eAAe,CA8BvE"}
package/dist/auto-get.js DELETED
@@ -1,54 +0,0 @@
1
- import { Get, Param, ParseIntPipe, Query } from '@nestjs/common';
2
- import { ApiOkResponse } from '@nestjs/swagger';
3
- export var FindMethodName;
4
- (function (FindMethodName) {
5
- FindMethodName["findMany"] = "findMany";
6
- FindMethodName["findOneById"] = "findOneById";
7
- FindMethodName["findOneByUuid"] = "findOneByUuid";
8
- })(FindMethodName || (FindMethodName = {}));
9
- export function __FindMethod() {
10
- return (...args) => {
11
- Get()(...args);
12
- };
13
- }
14
- export function __FindOneByIdMethod() {
15
- return (...args) => {
16
- Get(':id')(...args);
17
- };
18
- }
19
- export function __FindOneByUuid() {
20
- return (...args) => {
21
- Get(':uuid')(...args);
22
- };
23
- }
24
- export function AutoGet(options) {
25
- return (...args) => {
26
- const methodName = args[1].toString();
27
- switch (methodName.toString()) {
28
- case FindMethodName.findMany: {
29
- __FindMethod()(...args);
30
- ApiOkResponse({ type: [options.readDto] })(...args);
31
- Query()(args[0], args[1], 0);
32
- Reflect.defineMetadata('design:paramtypes', [options.queryDto], args[0], args[1]);
33
- break;
34
- }
35
- case FindMethodName.findOneById: {
36
- __FindOneByIdMethod()(...args);
37
- ApiOkResponse({ type: options.readDto })(...args);
38
- Param('id', ParseIntPipe)(args[0], args[1], 0);
39
- Reflect.defineMetadata('design:paramtypes', [Number], args[0], args[1]);
40
- break;
41
- }
42
- case FindMethodName.findOneByUuid: {
43
- __FindOneByUuid()(...args);
44
- ApiOkResponse({ type: options.readDto })(...args);
45
- Param('uuid')(args[0], args[1], 0);
46
- Reflect.defineMetadata('design:paramtypes', [String], args[0], args[1]);
47
- break;
48
- }
49
- default: {
50
- throw new Error(`${methodName.toString()} is not supported`);
51
- }
52
- }
53
- };
54
- }
@@ -1,7 +0,0 @@
1
- import { AutoControllerOptions } from './auto-controller-options.js';
2
- export declare enum CreateMethodName {
3
- createOne = "createOne"
4
- }
5
- export declare function __CreateOneMethod(): MethodDecorator;
6
- export declare function AutoPost(options: AutoControllerOptions): MethodDecorator;
7
- //# sourceMappingURL=auto-post.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto-post.d.ts","sourceRoot":"","sources":["../src/auto-post.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,oBAAY,gBAAgB;IACxB,SAAS,cAAc;CAC1B;AAED,wBAAgB,iBAAiB,IAAI,eAAe,CAInD;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,eAAe,CAgBxE"}
package/dist/auto-post.js DELETED
@@ -1,28 +0,0 @@
1
- import { Body, Post } from '@nestjs/common';
2
- import { ApiCreatedResponse } from '@nestjs/swagger';
3
- export var CreateMethodName;
4
- (function (CreateMethodName) {
5
- CreateMethodName["createOne"] = "createOne";
6
- })(CreateMethodName || (CreateMethodName = {}));
7
- export function __CreateOneMethod() {
8
- return (...args) => {
9
- Post()(...args);
10
- };
11
- }
12
- export function AutoPost(options) {
13
- return (...args) => {
14
- const methodName = args[1].toString();
15
- switch (methodName.toString()) {
16
- case CreateMethodName.createOne: {
17
- __CreateOneMethod()(...args);
18
- ApiCreatedResponse({ type: options.readDto })(...args);
19
- Body()(args[0], args[1], 0);
20
- Reflect.defineMetadata('design:paramtypes', [options.createDto], args[0], args[1]);
21
- break;
22
- }
23
- default: {
24
- throw new Error(`${methodName.toString()} is not supported`);
25
- }
26
- }
27
- };
28
- }
@@ -1,9 +0,0 @@
1
- import { AutoControllerOptions } from './auto-controller-options.js';
2
- export declare enum UpdateMethodName {
3
- updateOneById = "updateOneById",
4
- updateOneByUuid = "updateOneByUuid"
5
- }
6
- export declare function __UpdateOneByIdMethod(): MethodDecorator;
7
- export declare function __UpdateOneByUuid(): MethodDecorator;
8
- export declare function AutoPut(options: AutoControllerOptions): MethodDecorator;
9
- //# sourceMappingURL=auto-put.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto-put.d.ts","sourceRoot":"","sources":["../src/auto-put.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,oBAAY,gBAAgB;IACxB,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;CACtC;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CAIvD;AAED,wBAAgB,iBAAiB,IAAI,eAAe,CAInD;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,eAAe,CAwBvE"}
package/dist/auto-put.js DELETED
@@ -1,40 +0,0 @@
1
- import { Body, Param, ParseIntPipe, Put } from '@nestjs/common';
2
- export var UpdateMethodName;
3
- (function (UpdateMethodName) {
4
- UpdateMethodName["updateOneById"] = "updateOneById";
5
- UpdateMethodName["updateOneByUuid"] = "updateOneByUuid";
6
- })(UpdateMethodName || (UpdateMethodName = {}));
7
- export function __UpdateOneByIdMethod() {
8
- return (...args) => {
9
- Put(':id')(...args);
10
- };
11
- }
12
- export function __UpdateOneByUuid() {
13
- return (...args) => {
14
- Put(':uuid')(...args);
15
- };
16
- }
17
- export function AutoPut(options) {
18
- return (...args) => {
19
- const methodName = args[1].toString();
20
- switch (methodName.toString()) {
21
- case UpdateMethodName.updateOneById: {
22
- __UpdateOneByIdMethod()(...args);
23
- Param('id', ParseIntPipe)(args[0], args[1], 0);
24
- Body()(args[0], args[1], 1);
25
- Reflect.defineMetadata('design:paramtypes', [Number, options.updateDto], args[0], args[1]);
26
- break;
27
- }
28
- case UpdateMethodName.updateOneByUuid: {
29
- __UpdateOneByUuid()(...args);
30
- Param('uuid')(args[0], args[1], 0);
31
- Body()(args[0], args[1], 1);
32
- Reflect.defineMetadata('design:paramtypes', [String, options.updateDto], args[0], args[1]);
33
- break;
34
- }
35
- default: {
36
- throw new Error(`${methodName.toString()} is not supported`);
37
- }
38
- }
39
- };
40
- }
package/dist/helpers.d.ts DELETED
@@ -1,5 +0,0 @@
1
- /** biome-ignore-all lint/suspicious/noExplicitAny: Method decorato params */
2
- export declare function methodParamNames(params: any[]): string[];
3
- export declare function getAllMethodNames(target: any): string[];
4
- export declare function getInheritedPropertyDescriptor(target: any, methodName: string): PropertyDescriptor | undefined;
5
- //# sourceMappingURL=helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,YAY7C;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,CAiBvD;AACD,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAiB9G"}
package/dist/helpers.js DELETED
@@ -1,41 +0,0 @@
1
- /** biome-ignore-all lint/suspicious/noExplicitAny: Method decorato params */
2
- export function methodParamNames(params) {
3
- const [target, methodName] = params;
4
- const functionDeclerations = target?.[methodName]?.toString();
5
- if (!functionDeclerations) {
6
- throw new Error('Could not get the function decleration string');
7
- }
8
- return functionDeclerations
9
- .slice(functionDeclerations.indexOf('(') + 1, functionDeclerations.indexOf(')'))
10
- .split(',');
11
- }
12
- export function getAllMethodNames(target) {
13
- const methods = new Set();
14
- let currentProto = target?.prototype;
15
- // Stop when we hit the base Object prototype
16
- while (currentProto && currentProto !== Object.prototype) {
17
- Object.getOwnPropertyNames(currentProto).forEach((name) => {
18
- // Filter for functions and exclude the constructor
19
- if (name !== 'constructor' && typeof currentProto[name] === 'function') {
20
- methods.add(name);
21
- }
22
- });
23
- // Move up to the parent class
24
- currentProto = Object.getPrototypeOf(currentProto);
25
- }
26
- return Array.from(methods);
27
- }
28
- export function getInheritedPropertyDescriptor(target, methodName) {
29
- // 1. Get the initial prototype if target is a constructor,
30
- // or use target directly if we are already traversing the chain.
31
- let current = typeof target === 'function' ? target.prototype : target;
32
- while (current && current !== Object.prototype) {
33
- const descriptor = Object.getOwnPropertyDescriptor(current, methodName);
34
- if (descriptor) {
35
- return descriptor;
36
- }
37
- // Move up to the next link in the prototype chain
38
- current = Object.getPrototypeOf(current);
39
- }
40
- return undefined;
41
- }