@leyyo/common 1.0.2 → 1.0.3

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.
@@ -1,11 +1,18 @@
1
1
  import { CommonFqn, CommonFqnSecure } from "./index-types";
2
2
  import { Leyyo } from "../leyyo";
3
- import { FqnStereoType } from "../shared";
3
+ import { CommonFqnHook, FqnStereoType } from "../shared";
4
4
  export declare class CommonFqnImpl implements CommonFqn, CommonFqnSecure {
5
5
  private hook;
6
+ private proper;
7
+ constructor();
6
8
  get $back(): CommonFqn;
7
9
  $init(leyyo: Leyyo): void;
8
10
  get $secure(): CommonFqnSecure;
9
11
  name(value: any): string;
10
- register(value: any, type: FqnStereoType, pckName: string): void;
12
+ exists(target: any): boolean;
13
+ register(name: string, value: any, type: FqnStereoType, pckName: string): void;
14
+ get isProper(): boolean;
15
+ addHook(target: Function | Object, callback: CommonFqnHook): boolean;
16
+ isSysFunction(method: string): boolean;
17
+ isSysClass(clazz: string | Function): boolean;
11
18
  }
@@ -2,27 +2,35 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CommonFqnImpl = void 0;
4
4
  const shared_1 = require("../shared");
5
- // noinspection JSUnusedLocalSymbols
5
+ const literal_1 = require("../literal");
6
+ // noinspection JSUnusedLocalSymbols,JSUnusedGlobalSymbols
6
7
  class CommonFqnImpl {
8
+ constructor() {
9
+ this.name.bind(this);
10
+ this.exists.bind(this);
11
+ this.register.bind(this);
12
+ }
7
13
  get $back() {
8
14
  return this;
9
15
  }
10
16
  $init(leyyo) {
11
17
  this.hook = leyyo.hook;
12
- const fields = ['name', 'register'];
13
- const rec = { proper: false };
14
- fields.forEach(field => {
15
- rec[field] = this[field];
16
- });
18
+ const rec = {
19
+ proper: false,
20
+ exists: this.exists,
21
+ name: this.name,
22
+ register: this.register,
23
+ };
17
24
  // define itself temporarily for fqn operations
18
25
  leyyo.hook.defineProvider(shared_1.LY_ATTACHED_FQN, CommonFqnImpl, rec);
19
26
  // when new fqn provider is defined, replace all common methods
20
27
  leyyo.hook.whenProviderDefined(shared_1.LY_ATTACHED_FQN, CommonFqnImpl, (ins) => {
21
- fields.forEach(field => {
22
- if (typeof ins[field] === 'function') {
23
- this[field] = ins[field];
24
- }
25
- });
28
+ if (ins.proper) {
29
+ this.proper = true;
30
+ }
31
+ this.exists = ins.exists;
32
+ this.name = ins.name;
33
+ this.register = ins.register;
26
34
  });
27
35
  }
28
36
  get $secure() {
@@ -40,8 +48,74 @@ class CommonFqnImpl {
40
48
  return null;
41
49
  }
42
50
  }
43
- register(value, type, pckName) {
44
- this.hook.queueForCallback(shared_1.LY_PENDING_FQN_REGISTER, value, type, pckName);
51
+ exists(target) {
52
+ return false;
53
+ }
54
+ register(name, value, type, pckName) {
55
+ this.hook.queueForCallback(shared_1.LY_PENDING_FQN_REGISTER, name, value, type, pckName);
56
+ }
57
+ get isProper() {
58
+ return this.proper;
59
+ }
60
+ addHook(target, callback) {
61
+ var _a;
62
+ if (typeof target === 'object') {
63
+ try {
64
+ target = target.constructor;
65
+ }
66
+ catch (e) {
67
+ }
68
+ }
69
+ if (typeof target !== 'function' || typeof callback !== 'function') {
70
+ return false;
71
+ }
72
+ if (this.proper) {
73
+ callback(this.name(target));
74
+ return true;
75
+ }
76
+ let callbacks;
77
+ try {
78
+ callbacks = (_a = Object.getOwnPropertyDescriptor(target, shared_1.LY_SIGN_FQN_HOOK)) !== null && _a !== void 0 ? _a : [];
79
+ }
80
+ catch (e) {
81
+ console.log(`CommonFqnImpl.hook.get`, e.message);
82
+ }
83
+ if (!Array.isArray(callbacks)) {
84
+ callbacks = [];
85
+ }
86
+ callbacks.push(callback);
87
+ try {
88
+ Object.defineProperty(target, shared_1.LY_SIGN_FQN_HOOK, {
89
+ value: callbacks,
90
+ configurable: false,
91
+ writable: false,
92
+ enumerable: false
93
+ });
94
+ }
95
+ catch (e) {
96
+ console.log(`CommonFqnImpl.hook.set`, e.message);
97
+ return false;
98
+ }
99
+ return true;
100
+ }
101
+ isSysFunction(method) {
102
+ if (typeof method !== 'string') {
103
+ return false;
104
+ }
105
+ return literal_1.SysFunctionItems.includes(method);
106
+ }
107
+ isSysClass(clazz) {
108
+ let name;
109
+ if (typeof clazz === 'function') {
110
+ name = clazz.name;
111
+ }
112
+ else if (typeof clazz === 'string') {
113
+ name = clazz;
114
+ }
115
+ if (!name) {
116
+ return false;
117
+ }
118
+ return literal_1.SysClassItems.includes(name);
45
119
  }
46
120
  }
47
121
  exports.CommonFqnImpl = CommonFqnImpl;
@@ -1,6 +1,9 @@
1
- import { FqnStereoType, InitLike, ShiftMain, ShiftSecure } from "../shared";
1
+ import { CommonFqnHook, FqnStereoType, InitLike, ShiftMain, ShiftSecure } from "../shared";
2
2
  export interface CommonFqn extends ShiftSecure<CommonFqnSecure> {
3
- name(value: any): string;
4
- register(value: any, type: FqnStereoType, pckName: string): void;
3
+ name(target: any): string;
4
+ exists(target: any): boolean;
5
+ register(name: string, target: any, type: FqnStereoType, pckName: string): void;
6
+ addHook(target: Function | Object, callback: CommonFqnHook): boolean;
7
+ get isProper(): boolean;
5
8
  }
6
9
  export type CommonFqnSecure = ShiftMain<CommonFqn> & InitLike;
@@ -48,31 +48,46 @@ class LeyyoImpl {
48
48
  exception_1.Exception.$setLeyyo(this);
49
49
  }
50
50
  initFqnRegister() {
51
- this.fqn.register(is_1.CommonIsImpl, 'class', internal_1.FQN_PCK);
52
- this.fqn.register(storage_1.CommonStorageImpl, 'class', internal_1.FQN_PCK);
53
- this.fqn.register(hook_1.CommonHookImpl, 'class', internal_1.FQN_PCK);
54
- this.fqn.register(fqn_1.CommonFqnImpl, 'class', internal_1.FQN_PCK);
55
- this.fqn.register(log_1.CommonLogImpl, 'class', internal_1.FQN_PCK);
56
- this.fqn.register(error_1.CommonErrorImpl, 'class', internal_1.FQN_PCK);
57
- this.fqn.register(assertion_1.CommonAssertionImpl, 'class', internal_1.FQN_PCK);
58
- this.fqn.register(to_1.CommonToImpl, 'class', internal_1.FQN_PCK);
59
- this.fqn.register(shared_1.List, 'class', internal_1.FQN_PCK);
60
- this.fqn.register(log_1.LoggerImpl, 'class', internal_1.FQN_PCK);
61
- this.fqn.register(node_assert_1.default, 'function', internal_1.FQN_PCK);
51
+ this.fqn.register(null, is_1.CommonIsImpl, 'class', internal_1.FQN_PCK);
52
+ this.fqn.register(null, storage_1.CommonStorageImpl, 'class', internal_1.FQN_PCK);
53
+ this.fqn.register(null, hook_1.CommonHookImpl, 'class', internal_1.FQN_PCK);
54
+ this.fqn.register(null, fqn_1.CommonFqnImpl, 'class', internal_1.FQN_PCK);
55
+ this.fqn.register(null, log_1.CommonLogImpl, 'class', internal_1.FQN_PCK);
56
+ this.fqn.register(null, error_1.CommonErrorImpl, 'class', internal_1.FQN_PCK);
57
+ this.fqn.register(null, assertion_1.CommonAssertionImpl, 'class', internal_1.FQN_PCK);
58
+ this.fqn.register(null, to_1.CommonToImpl, 'class', internal_1.FQN_PCK);
59
+ this.fqn.register(null, shared_1.List, 'class', internal_1.FQN_PCK);
60
+ this.fqn.register(null, log_1.LoggerImpl, 'class', internal_1.FQN_PCK);
61
+ this.fqn.register(null, node_assert_1.default, 'function', internal_1.FQN_PCK);
62
62
  }
63
63
  initErrorRegister() {
64
64
  [exception_1.Exception, exception_1.AssertionException, exception_1.CausedException, exception_1.DeveloperException, exception_1.MultipleException].forEach(cls => {
65
- this.fqn.register(cls, 'class', internal_1.FQN_PCK);
65
+ this.fqn.register(null, cls, 'class', internal_1.FQN_PCK);
66
66
  this.error.register(cls);
67
67
  });
68
68
  }
69
69
  initEnumRegister() {
70
- [literal_1.PrimitiveItems, literal_1.StorageTypeItems, literal_1.RealValueItems, literal_1.KeyValueItems, literal_1.WeakTrueItems, literal_1.WeakFalseItems,
71
- literal_1.HttpMethodItems, literal_1.HttpPlaceItems, literal_1.SeverityItems, literal_1.EnvironmentItems,
72
- literal_1.CountryCodeItems, literal_1.LanguageCodeItems, literal_1.LocaleCodeItems].forEach(enm => {
73
- this.fqn.register(enm, 'enum', internal_1.FQN_PCK);
74
- this.hook.queueForCallback(shared_1.LY_PENDING_ENUM_REGISTER, enm);
75
- });
70
+ const enumMap = {
71
+ Primitive: literal_1.PrimitiveItems,
72
+ StorageType: literal_1.StorageTypeItems,
73
+ RealValue: literal_1.RealValueItems,
74
+ KeyValue: literal_1.KeyValueItems,
75
+ WeakTrue: literal_1.WeakTrueItems,
76
+ WeakFalse: literal_1.WeakFalseItems,
77
+ HttpMethod: literal_1.HttpMethodItems,
78
+ HttpPlace: literal_1.HttpPlaceItems,
79
+ Severity: literal_1.SeverityItems,
80
+ Environment: literal_1.EnvironmentItems,
81
+ CountryCode: literal_1.CountryCodeItems,
82
+ LanguageCode: literal_1.LanguageCodeItems,
83
+ LocaleCode: literal_1.LocaleCodeItems,
84
+ SysClass: literal_1.SysClassItems,
85
+ SysFunction: literal_1.SysFunctionItems,
86
+ };
87
+ for (const [name, value] of Object.entries(enumMap)) {
88
+ this.fqn.register(name, value, 'enum', internal_1.FQN_PCK);
89
+ this.hook.queueForCallback(shared_1.LY_PENDING_ENUM_REGISTER, value);
90
+ }
76
91
  }
77
92
  }
78
93
  exports.LeyyoImpl = LeyyoImpl;
@@ -9,6 +9,8 @@ export * from './primitive';
9
9
  export * from './real-value';
10
10
  export * from './severity';
11
11
  export * from './storage-type';
12
+ export * from './sys-class';
13
+ export * from './sys-function';
12
14
  export * from './weak-false';
13
15
  export * from './weak-true';
14
16
  export * from './index-types';
@@ -25,6 +25,8 @@ __exportStar(require("./primitive"), exports);
25
25
  __exportStar(require("./real-value"), exports);
26
26
  __exportStar(require("./severity"), exports);
27
27
  __exportStar(require("./storage-type"), exports);
28
+ __exportStar(require("./sys-class"), exports);
29
+ __exportStar(require("./sys-function"), exports);
28
30
  __exportStar(require("./weak-false"), exports);
29
31
  __exportStar(require("./weak-true"), exports);
30
32
  __exportStar(require("./index-types"), exports);
@@ -0,0 +1,2 @@
1
+ export declare const SysClassItems: readonly ["Function", "Object", "Boolean", "Symbol", "Error", "AggregateError", "EvalError", "InternalError", "RangeError", "ReferenceError", "SyntaxError", "TypeError", "URIError", "Number", "BigInt", "Math", "Date", "String", "RegExp", "Array", "Int8Array", "Uint8Array", "Uint8ClampedArray", "Int16Array", "Uint16Array", "Int32Array", "Uint32Array", "Float32Array", "Float64Array", "BigInt64Array", "BigUint64Array", "Map", "Set", "WeakMap", "WeakSet", "ArrayBuffer", "SharedArrayBuffer", "Atomics", "DataView", "JSON", "Promise", "Generator", "GeneratorFunction", "AsyncFunction", "AsyncGenerator", "AsyncGeneratorFunction", "Reflect", "Proxy", "Intl", "Intl.Collator", "Intl.DateTimeFormat", "Intl.ListFormat", "Intl.NumberFormat", "Intl.PluralRules", "Intl.RelativeTimeFormat", "Intl.Locale", "WebAssembly", "WebAssembly.Module", "WebAssembly.Instance", "WebAssembly.Memory", "WebAssembly.Table", "WebAssembly.CompileError", "WebAssembly.LinkError", "WebAssembly.RuntimeError"];
2
+ export type SysClass = typeof SysClassItems[number];
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SysClassItems = void 0;
4
+ exports.SysClassItems = [
5
+ 'Function', 'Object', 'Boolean', 'Symbol',
6
+ 'Error', 'AggregateError', 'EvalError', 'InternalError', 'RangeError', 'ReferenceError', 'SyntaxError', 'TypeError', 'URIError',
7
+ `Number`, `BigInt`, `Math`, `Date`,
8
+ 'String', 'RegExp',
9
+ 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array',
10
+ 'Uint16Array', 'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'BigInt64Array', 'BigUint64Array',
11
+ 'Map', 'Set', 'WeakMap', 'WeakSet',
12
+ 'ArrayBuffer', 'SharedArrayBuffer', 'Atomics', 'DataView', 'JSON',
13
+ 'Promise', 'Generator', 'GeneratorFunction', 'AsyncFunction', 'AsyncGenerator', 'AsyncGeneratorFunction',
14
+ 'Reflect', 'Proxy',
15
+ 'Intl', 'Intl.Collator', 'Intl.DateTimeFormat', 'Intl.ListFormat', 'Intl.NumberFormat',
16
+ 'Intl.PluralRules', 'Intl.RelativeTimeFormat', 'Intl.Locale',
17
+ 'WebAssembly', 'WebAssembly.Module', 'WebAssembly.Instance', 'WebAssembly.Memory', 'WebAssembly.Table',
18
+ 'WebAssembly.CompileError', 'WebAssembly.LinkError', 'WebAssembly.RuntimeError'
19
+ ];
@@ -0,0 +1,2 @@
1
+ export declare const SysFunctionItems: readonly ["constructor", "__defineGetter__", "__defineSetter__", "hasOwnProperty", "__lookupGetter__", "__lookupSetter__", "isPrototypeOf", "propertyIsEnumerable", "toString", "valueOf", "__proto__", "toLocaleString", "toJSON", "__esModule"];
2
+ export type SysFunction = typeof SysFunctionItems[number];
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SysFunctionItems = void 0;
4
+ exports.SysFunctionItems = ['constructor', '__defineGetter__', '__defineSetter__', 'hasOwnProperty',
5
+ '__lookupGetter__', '__lookupSetter__', 'isPrototypeOf', 'propertyIsEnumerable',
6
+ 'toString', 'valueOf', '__proto__', 'toLocaleString', 'toJSON', '__esModule'];
@@ -18,7 +18,6 @@ export declare class LoggerImpl implements Logger, LoggerSecure {
18
18
  get $clazz(): Function;
19
19
  get $name(): string;
20
20
  static $setLeyyo(leyyo: Leyyo): void;
21
- $setName(name: string): void;
22
21
  $setMethod(method: Severity, lambda?: LoggerLambda): void;
23
22
  $assert(error: Error, indicator: string, params?: unknown): void;
24
23
  }
@@ -20,6 +20,12 @@ class LoggerImpl {
20
20
  default:
21
21
  throw new exception_1.DeveloperException('invalid.logger.name', { type: typeof value });
22
22
  }
23
+ // when this object is signed by FQN, then refresh logger name
24
+ if (!LoggerImpl._fqn.exists(value)) {
25
+ LoggerImpl._fqn.addHook(value, (name) => {
26
+ this._name = name;
27
+ });
28
+ }
23
29
  }
24
30
  debug(message, params) {
25
31
  LoggerImpl._log.apply({ severity: 'debug', message: message, holder: this._name, params: params });
@@ -56,9 +62,6 @@ class LoggerImpl {
56
62
  this._fqn = leyyo.fqn;
57
63
  this._log = leyyo.log;
58
64
  }
59
- $setName(name) {
60
- this._name = name;
61
- }
62
65
  $setMethod(method, lambda) {
63
66
  if (typeof lambda === 'function') {
64
67
  this[method] = lambda;
@@ -1,6 +1,7 @@
1
1
  export declare const LY_ATTACHED_ERROR = "#lyy.attached.error";
2
2
  export declare const LY_PENDING_ERROR_REGISTER = "#lyy.pending.error.register";
3
3
  export declare const LY_PENDING_ENUM_REGISTER = "#lyy.pending.enum.register";
4
+ export declare const LY_SIGN_FQN_HOOK: unique symbol;
4
5
  export declare const LY_ATTACHED_FQN = "#lyy.attached.fqn";
5
6
  export declare const LY_PENDING_FQN_REGISTER = "#lyy.pending.fqn.register";
6
7
  export declare const LY_ATTACHED_LOG = "#lyy.attached.log";
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LY_PENDING_LOG_REGISTER = exports.LY_ATTACHED_LOG = exports.LY_PENDING_FQN_REGISTER = exports.LY_ATTACHED_FQN = exports.LY_PENDING_ENUM_REGISTER = exports.LY_PENDING_ERROR_REGISTER = exports.LY_ATTACHED_ERROR = void 0;
3
+ exports.LY_PENDING_LOG_REGISTER = exports.LY_ATTACHED_LOG = exports.LY_PENDING_FQN_REGISTER = exports.LY_ATTACHED_FQN = exports.LY_SIGN_FQN_HOOK = exports.LY_PENDING_ENUM_REGISTER = exports.LY_PENDING_ERROR_REGISTER = exports.LY_ATTACHED_ERROR = void 0;
4
4
  exports.LY_ATTACHED_ERROR = '#lyy.attached.error';
5
5
  exports.LY_PENDING_ERROR_REGISTER = '#lyy.pending.error.register';
6
6
  exports.LY_PENDING_ENUM_REGISTER = '#lyy.pending.enum.register';
7
+ exports.LY_SIGN_FQN_HOOK = Symbol.for(`#lyy.fqn.h`);
7
8
  exports.LY_ATTACHED_FQN = '#lyy.attached.fqn';
8
9
  exports.LY_PENDING_FQN_REGISTER = '#lyy.pending.fqn.register';
9
10
  exports.LY_ATTACHED_LOG = '#lyy.attached.log';
@@ -33,10 +33,12 @@ export interface HookWaitingProviderItem {
33
33
  }
34
34
  export type HookDefinedProviderLambda<T extends HookDefinedProvider = HookDefinedProvider> = (instance: T) => void;
35
35
  export interface FqnDefinedProvider extends HookDefinedProvider {
36
- name(value: any): string;
37
- register(value: any, type: FqnStereoType, pckName: string): void;
36
+ exists(target: any): boolean;
37
+ name(target: any): string;
38
+ register(name: string, target: any, type: FqnStereoType, pckName: string): void;
38
39
  }
39
40
  export type FqnStereoType = 'class' | 'function' | 'enum' | 'literal';
41
+ export type CommonFqnHook = (name: string) => void;
40
42
  export interface ErrorDefinedProvider extends HookDefinedProvider {
41
43
  register(exception: ExceptionLike): void;
42
44
  build?(e: Error | string): ExceptionLike;
@@ -98,7 +100,6 @@ export interface LoggerSecure extends ShiftMain<Logger> {
98
100
  get $clazz(): Function;
99
101
  get $name(): string;
100
102
  $assert(error: Error, indicator: string, params?: unknown): void;
101
- $setName(name: string): void;
102
103
  $setMethod(method: Severity, lambda?: LoggerLambda): void;
103
104
  }
104
105
  export type LoggerLambda = (whatever: any, params?: any) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leyyo/common",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Common library",
5
5
  "keywords": [
6
6
  "common"