@qwreey-js/tsutil 1.0.0

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,3 @@
1
+ export * from "./mixin.js";
2
+ export * from "./utils.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from "./mixin.js";
2
+ export * from "./utils.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { UnionToIntersection } from "./utils.js";
2
+ export type AbstractConstructor<T = any> = abstract new (...args: any[]) => T;
3
+ export type MixinBoth<A extends AbstractConstructor<InstanceType<A>>, B extends AbstractConstructor<InstanceType<B>>> = (A & B) & AbstractConstructor<InstanceType<A> & InstanceType<B>>;
4
+ export type Mixin<T extends AbstractConstructor[]> = T extends [
5
+ infer First extends AbstractConstructor
6
+ ] ? First : T extends [
7
+ ...infer Others extends AbstractConstructor[],
8
+ infer Last extends AbstractConstructor
9
+ ] ? MixinBoth<Mixin<Others>, Last> : never;
10
+ export declare function applyRuntimeMixins(targetClass: any, baseClassList: any[]): void;
11
+ export declare function mixin<T extends AbstractConstructor[]>(...baseClassList: T): Mixin<T>;
12
+ export type MixinApplyList = [
13
+ boolean | undefined | null,
14
+ AbstractConstructor
15
+ ][];
16
+ export type MixinInstance<Apply extends MixinApplyList> = UnionToIntersection<{
17
+ [K in keyof Apply]: Apply[K][0] extends true ? InstanceType<Apply[K][1]> : {};
18
+ }[number]>;
19
+ //# sourceMappingURL=mixin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mixin.d.ts","sourceRoot":"","sources":["../src/mixin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAE9E,MAAM,MAAM,SAAS,CACnB,CAAC,SAAS,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAC9C,CAAC,SAAS,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAC5C,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAErE,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,mBAAmB,EAAE,IAAI,CAAC,SAAS;IAC7D,MAAM,KAAK,SAAS,mBAAmB;CACxC,GACG,KAAK,GACL,CAAC,SAAS;IACN,GAAG,MAAM,MAAM,SAAS,mBAAmB,EAAE;IAC7C,MAAM,IAAI,SAAS,mBAAmB;CACvC,GACD,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAC9B,KAAK,CAAC;AAEZ,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,QAwBxE;AAED,wBAAgB,KAAK,CAAC,CAAC,SAAS,mBAAmB,EAAE,EACnD,GAAG,aAAa,EAAE,CAAC,GAClB,KAAK,CAAC,CAAC,CAAC,CAIV;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,GAAG,SAAS,GAAG,IAAI;IAC1B,mBAAmB;CACpB,EAAE,CAAC;AAEJ,MAAM,MAAM,aAAa,CAAC,KAAK,SAAS,cAAc,IAAI,mBAAmB,CAC3E;KACG,CAAC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GACxC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACzB,EAAE;CACP,CAAC,MAAM,CAAC,CACV,CAAC"}
package/dist/mixin.js ADDED
@@ -0,0 +1,27 @@
1
+ export function applyRuntimeMixins(targetClass, baseClassList) {
2
+ for (const baseClass of baseClassList) {
3
+ Object.getOwnPropertyNames(baseClass.prototype).forEach((name) => {
4
+ if (name !== "constructor") {
5
+ const descriptor = Object.getOwnPropertyDescriptor(baseClass.prototype, name);
6
+ if (descriptor) {
7
+ Object.defineProperty(targetClass.prototype, name, descriptor);
8
+ }
9
+ }
10
+ });
11
+ for (const name of Object.getOwnPropertyNames(baseClass)) {
12
+ if (!["length", "prototype", "name"].includes(name)) {
13
+ const descriptor = Object.getOwnPropertyDescriptor(baseClass, name);
14
+ if (descriptor) {
15
+ Object.defineProperty(targetClass, name, descriptor);
16
+ }
17
+ }
18
+ }
19
+ }
20
+ }
21
+ export function mixin(...baseClassList) {
22
+ const targetClass = class {
23
+ };
24
+ applyRuntimeMixins(targetClass, baseClassList);
25
+ return targetClass;
26
+ }
27
+ //# sourceMappingURL=mixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mixin.js","sourceRoot":"","sources":["../src/mixin.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,kBAAkB,CAAC,WAAgB,EAAE,aAAoB;IACvE,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;QACtC,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC/D,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;gBAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAChD,SAAS,CAAC,SAAS,EACnB,IAAI,CACL,CAAC;gBACF,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpD,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAEpE,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CACnB,GAAG,aAAgB;IAEnB,MAAM,WAAW,GAAG;KAAQ,CAAC;IAC7B,kBAAkB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC/C,OAAO,WAAkB,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CACnC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CACvC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GAC1B,CAAC,GACD,KAAK,CAAC"}
package/dist/utils.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@qwreey-js/tsutil",
3
+ "version": "1.0.0",
4
+ "description": "Typescript utilities",
5
+ "keywords": [
6
+ "typescript"
7
+ ],
8
+ "homepage": "https://github.com/qwreey/qwreey-tsutil#readme",
9
+ "bugs": {
10
+ "url": "https://github.com/qwreey/qwreey-tsutil/issues"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/qwreey/qwreey-tsutil.git"
15
+ },
16
+ "license": "MIT",
17
+ "author": "me@qwreey.moe",
18
+ "type": "module",
19
+ "main": "./dist/index.js",
20
+ "types": "./dist/index.d.ts",
21
+ "scripts": {
22
+ "prepack": "npm ci --include=dev && npm run check && npm run build",
23
+ "build": "node_modules/typescript/bin/tsc",
24
+ "check": "npm run check:tsc && npm run check:eslint && npm run check:format",
25
+ "check:eslint": "eslint",
26
+ "check:tsc": "node_modules/typescript/bin/tsc --noemit",
27
+ "check:format": "prettier --check .",
28
+ "fix:format": "prettier --write .",
29
+ "test": "tsx src/test/index.ts"
30
+ },
31
+ "devDependencies": {
32
+ "@eslint/js": "^10.0.1",
33
+ "eslint": "^10.2.1",
34
+ "prettier": "^3.8.3",
35
+ "typescript": "^6.0.3",
36
+ "typescript-eslint": "^8.59.3"
37
+ },
38
+ "exports": {
39
+ ".": {
40
+ "types": "./dist/index.d.ts",
41
+ "import": "./dist/index.js"
42
+ }
43
+ },
44
+ "publishConfig": {
45
+ "access": "public"
46
+ },
47
+ "files": [
48
+ "dist", "!dist/test"
49
+ ]
50
+ }