tool-class-info 0.0.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.
@@ -0,0 +1,16 @@
1
+ export type LogSink = (message: string) => void;
2
+ export declare class ClassInfo {
3
+ getPublicMethods(): string[];
4
+ getPublicProperties(): string[];
5
+ private getPrivateFields;
6
+ private isPrivateField;
7
+ private getAllMethods;
8
+ getStructure(): {
9
+ publicProperties: string[];
10
+ publicMethods: string[];
11
+ privateFields: string[];
12
+ };
13
+ logStructure(): void;
14
+ getPublicState(): Record<string, any>;
15
+ }
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAEhD,qBAAa,SAAS;IAEpB,gBAAgB,IAAI,MAAM,EAAE,CAQ3B;IAGD,mBAAmB,IAAI,MAAM,EAAE,CAU9B;IAGD,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,aAAa;IAoBrB,YAAY,IAAI;QACd,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,aAAa,EAAE,MAAM,EAAE,CAAA;KACxB,CAMA;IAGD,YAAY,IAAI,IAAI,CAMnB;IAGD,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CASpC;CACF"}
package/dist/index.js ADDED
@@ -0,0 +1,88 @@
1
+ export class ClassInfo {
2
+ // Получение только публичных методов
3
+ getPublicMethods() {
4
+ const allMethods = this.getAllMethods();
5
+ const privateFields = this.getPrivateFields();
6
+ return allMethods.filter(method => !privateFields.includes(method) &&
7
+ !method.startsWith('#') // исключаем приватные поля с #
8
+ );
9
+ }
10
+ // Получение только публичных свойств
11
+ getPublicProperties() {
12
+ const allProps = Object.getOwnPropertyNames(this)
13
+ .filter(prop => typeof this[prop] !== 'function');
14
+ const privateFields = this.getPrivateFields();
15
+ return allProps.filter(prop => !privateFields.includes(prop) &&
16
+ !prop.startsWith('#'));
17
+ }
18
+ // Получение всех приватных полей (включая protected)
19
+ getPrivateFields() {
20
+ const privateFields = [];
21
+ let proto = Object.getPrototypeOf(this);
22
+ // Собираем все поля из прототипа
23
+ while (proto && proto !== Object.prototype) {
24
+ const props = Object.getOwnPropertyNames(proto);
25
+ props.forEach(prop => {
26
+ // Проверяем, является ли поле приватным/защищённым
27
+ if (this.isPrivateField(prop)) {
28
+ privateFields.push(prop);
29
+ }
30
+ });
31
+ proto = Object.getPrototypeOf(proto);
32
+ }
33
+ return privateFields;
34
+ }
35
+ // Определяем приватное/защищённое поле по конвенции
36
+ isPrivateField(fieldName) {
37
+ // Варианты обозначения приватных полей:
38
+ // 1. Начинается с _ (конвенция)
39
+ // 2. Начинается с # (ES2022 приватные поля)
40
+ // 3. Начинается с __ (другая конвенция)
41
+ return fieldName.startsWith('_') ||
42
+ fieldName.startsWith('#') ||
43
+ fieldName.startsWith('__');
44
+ }
45
+ // Получение всех методов (включая приватные)
46
+ getAllMethods() {
47
+ const methods = [];
48
+ let proto = Object.getPrototypeOf(this);
49
+ while (proto && proto !== Object.prototype) {
50
+ const props = Object.getOwnPropertyNames(proto);
51
+ props.forEach(prop => {
52
+ if (prop !== 'constructor' &&
53
+ typeof this[prop] === 'function' &&
54
+ !methods.includes(prop)) {
55
+ methods.push(prop);
56
+ }
57
+ });
58
+ proto = Object.getPrototypeOf(proto);
59
+ }
60
+ return methods;
61
+ }
62
+ // Основной метод для получения структуры
63
+ getStructure() {
64
+ return {
65
+ publicProperties: this.getPublicProperties(),
66
+ publicMethods: this.getPublicMethods(),
67
+ privateFields: this.getPrivateFields()
68
+ };
69
+ }
70
+ // Вывод в консоль с чётким разделением
71
+ logStructure() {
72
+ const info = this.getStructure();
73
+ console.log(`=== Публичная структура ${this.constructor.name} ===`);
74
+ console.log('📦 Публичные свойства:', info.publicProperties.length ? info.publicProperties : 'нет');
75
+ console.log('🔧 Публичные методы:', info.publicMethods.length ? info.publicMethods : 'нет');
76
+ console.log('🔒 Приватные поля (скрыты):', info.privateFields.length ? info.privateFields : 'нет');
77
+ }
78
+ // Получение только публичных свойств с их значениями
79
+ getPublicState() {
80
+ const result = {};
81
+ const props = this.getPublicProperties();
82
+ props.forEach(prop => {
83
+ result[prop] = this[prop];
84
+ });
85
+ return result;
86
+ }
87
+ }
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "tool-class-info",
3
+ "publishConfig": { "access": "public" },
4
+ "version": "0.0.1",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "./package.json": "./package.json"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md"
19
+ ],
20
+ "sideEffects": false,
21
+ "engines": {
22
+ "node": ">=20"
23
+ },
24
+ "scripts": {
25
+ "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
26
+ "build": "npm run clean && tsc -p tsconfig.json",
27
+ "watch": "tsc -p tsconfig.json --watch",
28
+ "typecheck": "tsc -p tsconfig.json --noEmit",
29
+ "prepublishOnly": "npm run build",
30
+ "TESTING": "npx tsx src/test.ts",
31
+ "TESTING:watch": "npx tsx watch src/test.ts",
32
+ "ver:patch": "npm version patch --no-git-tag-version",
33
+ "ver:minor": "npm version minor --no-git-tag-version",
34
+ "ver:major": "npm version major --no-git-tag-version",
35
+ "release:patch": "npm run ver:patch && npm run build && npm publish --access public",
36
+ "release:minor": "npm run ver:minor && npm run build && npm publish --access public",
37
+ "release:major": "npm run ver:major && npm run build && npm publish --access public"
38
+ },
39
+ "author": "Vladimir Kurguzov <kurguzov74@gmail.com>",
40
+ "license": "ISC",
41
+ "devDependencies": {
42
+ "@types/node": "^24.19.0",
43
+ "typescript": "^7.0.2"
44
+ }
45
+ }