feat: Update module exports and enhance TypeScript configuration
This commit is contained in:
@@ -2,8 +2,15 @@
|
|||||||
"name": "@sammo-ts/logic",
|
"name": "@sammo-ts/logic",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
|
"type": "module",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"types": "dist/index.d.ts",
|
"types": "dist/index.d.ts",
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"types": "./dist/index.d.ts",
|
||||||
|
"default": "./dist/index.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc -p tsconfig.json",
|
"build": "tsc -p tsconfig.json",
|
||||||
"dev": "node -e \"console.log('dev not configured')\"",
|
"dev": "node -e \"console.log('dev not configured')\"",
|
||||||
|
|||||||
+10
-10
@@ -1,10 +1,10 @@
|
|||||||
export * from './domain/entities';
|
export * from './domain/entities.js';
|
||||||
export * from './ports/rng';
|
export * from './ports/rng.js';
|
||||||
export * from './ports/world';
|
export * from './ports/world.js';
|
||||||
export * from './triggers';
|
export * from './triggers/index.js';
|
||||||
export * from './util/BytesLike';
|
export * from './util/BytesLike.js';
|
||||||
export * from './util/convertBytesLikeToArrayBuffer';
|
export * from './util/convertBytesLikeToArrayBuffer.js';
|
||||||
export * from './util/convertBytesLikeToUint8Array';
|
export * from './util/convertBytesLikeToUint8Array.js';
|
||||||
export * from './util/LiteHashDRBG';
|
export * from './util/LiteHashDRBG.js';
|
||||||
export * from './util/RNG';
|
export * from './util/RNG.js';
|
||||||
export * from './util/RandUtil';
|
export * from './util/RandUtil.js';
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import type {
|
|||||||
GeneralId,
|
GeneralId,
|
||||||
Nation,
|
Nation,
|
||||||
NationId,
|
NationId,
|
||||||
} from '../domain/entities';
|
} from '../domain/entities.js';
|
||||||
|
|
||||||
export interface GeneralRepository<GeneralType extends General = General> {
|
export interface GeneralRepository<GeneralType extends General = General> {
|
||||||
getById(id: GeneralId): Promise<GeneralType | null>;
|
getById(id: GeneralId): Promise<GeneralType | null>;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { GeneralTriggerState } from '../domain/entities';
|
import type { GeneralTriggerState } from '../domain/entities.js';
|
||||||
import { type GeneralActionContext, GeneralTriggerCaller } from './general';
|
import { type GeneralActionContext, GeneralTriggerCaller } from './general.js';
|
||||||
|
|
||||||
export interface GeneralActionModule<TriggerState extends GeneralTriggerState = GeneralTriggerState> {
|
export interface GeneralActionModule<TriggerState extends GeneralTriggerState = GeneralTriggerState> {
|
||||||
getName?(): string;
|
getName?(): string;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import type { General, GeneralTriggerState } from '../domain/entities';
|
import type { General, GeneralTriggerState } from '../domain/entities.js';
|
||||||
import type { RandomGenerator } from '../ports/rng';
|
import type { RandomGenerator } from '../ports/rng.js';
|
||||||
import type { WorldStateRepository } from '../ports/world';
|
import type { WorldStateRepository } from '../ports/world.js';
|
||||||
import { TriggerCaller, type Trigger } from './core';
|
import { TriggerCaller, type Trigger } from './core.js';
|
||||||
|
|
||||||
export interface GeneralActionLogSink {
|
export interface GeneralActionLogSink {
|
||||||
push(message: string): void;
|
push(message: string): void;
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
export * from './core';
|
export * from './core.js';
|
||||||
export * from './general';
|
export * from './general.js';
|
||||||
export * from './general-action';
|
export * from './general-action.js';
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import type { RNG } from './RNG';
|
import type { RNG } from './RNG.js';
|
||||||
|
|
||||||
import { sha512 } from 'js-sha512';
|
import { sha512 } from 'js-sha512';
|
||||||
|
|
||||||
import { convertBytesLikeToUint8Array } from './convertBytesLikeToUint8Array';
|
import { convertBytesLikeToUint8Array } from './convertBytesLikeToUint8Array.js';
|
||||||
import type { BytesLike } from './BytesLike';
|
import type { BytesLike } from './BytesLike.js';
|
||||||
|
|
||||||
const maxRngSupportBit = 53;
|
const maxRngSupportBit = 53;
|
||||||
const maxInt = 0x1f_ffff_ffff_ffff; // NOTE: b 0, 10000110011, 11...11
|
const maxInt = 0x1f_ffff_ffff_ffff; // NOTE: b 0, 10000110011, 11...11
|
||||||
@@ -111,7 +111,7 @@ export class LiteHashDRBG implements RNG {
|
|||||||
|
|
||||||
protected genNextBlock(): void {
|
protected genNextBlock(): void {
|
||||||
this.hq.setUint32(this.hqIdxPos, this.stateIdx, true);
|
this.hq.setUint32(this.hqIdxPos, this.stateIdx, true);
|
||||||
const digest = sha512.arrayBuffer(this.hq.buffer);
|
const digest = sha512.arrayBuffer(this.hq.buffer as ArrayBuffer);
|
||||||
this.buffer = digest;
|
this.buffer = digest;
|
||||||
this.bufferIdx = 0;
|
this.bufferIdx = 0;
|
||||||
this.stateIdx += 1;
|
this.stateIdx += 1;
|
||||||
@@ -181,7 +181,7 @@ export class LiteHashDRBG implements RNG {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
result[bytes - 1] &= 0xff >> (8 - headBits);
|
result[bytes - 1]! &= 0xff >> (8 - headBits);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import type { RNG } from './RNG';
|
import type { RNG } from './RNG.js';
|
||||||
|
|
||||||
// RNG 유틸리티 모음
|
// RNG 유틸리티 모음
|
||||||
export class RandUtil {
|
export class RandUtil {
|
||||||
@@ -25,8 +25,8 @@ export class RandUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public nextBit(): boolean {
|
public nextBit(): boolean {
|
||||||
const view = new DataView(this.rng.nextBits(1) as ArrayBufferLike);
|
const bits = this.rng.nextBits(1);
|
||||||
return view.getUint8(0) != 0;
|
return bits[0]! != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public nextBool(prob = 0.5): boolean {
|
public nextBool(prob = 0.5): boolean {
|
||||||
@@ -57,7 +57,10 @@ export class RandUtil {
|
|||||||
if (srcIdx === destIdx) {
|
if (srcIdx === destIdx) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
[result[srcIdx], result[destIdx]] = [result[destIdx], result[srcIdx]];
|
const srcValue = result[srcIdx]!;
|
||||||
|
const destValue = result[destIdx]!;
|
||||||
|
result[srcIdx] = destValue;
|
||||||
|
result[destIdx] = srcValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -71,14 +74,15 @@ export class RandUtil {
|
|||||||
throw new Error('Empty items');
|
throw new Error('Empty items');
|
||||||
}
|
}
|
||||||
const idx = this.rng.nextInt(items.length - 1);
|
const idx = this.rng.nextInt(items.length - 1);
|
||||||
return items[idx];
|
return items[idx]!;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (items instanceof Set) {
|
if (items instanceof Set) {
|
||||||
return this.choice(Array.from(items.values()));
|
return this.choice(Array.from(items.values()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return items[this.choice(Array.from(Object.keys(items)))];
|
const key = this.choice(Array.from(Object.keys(items))) as keyof typeof items;
|
||||||
|
return items[key]!;
|
||||||
}
|
}
|
||||||
|
|
||||||
public choiceUsingWeight(items: Record<string | number, number>): string | number {
|
public choiceUsingWeight(items: Record<string | number, number>): string | number {
|
||||||
|
|||||||
@@ -1,11 +1,22 @@
|
|||||||
import type { BytesLike } from './BytesLike';
|
import type { BytesLike } from './BytesLike.js';
|
||||||
|
|
||||||
export function convertBytesLikeToArrayBuffer(data: BytesLike, encodeUTF8 = true): ArrayBuffer {
|
export function convertBytesLikeToArrayBuffer(data: BytesLike, encodeUTF8 = true): ArrayBuffer {
|
||||||
if (data instanceof ArrayBuffer) {
|
if (data instanceof ArrayBuffer) {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
if (data instanceof Uint8Array) {
|
if (data instanceof Uint8Array) {
|
||||||
return data.buffer;
|
if (
|
||||||
|
data.byteOffset === 0
|
||||||
|
&& data.byteLength === data.buffer.byteLength
|
||||||
|
&& data.buffer instanceof ArrayBuffer
|
||||||
|
) {
|
||||||
|
return data.buffer;
|
||||||
|
}
|
||||||
|
return data.slice().buffer;
|
||||||
|
}
|
||||||
|
if (data instanceof DataView) {
|
||||||
|
const view = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
||||||
|
return view.slice().buffer;
|
||||||
}
|
}
|
||||||
if (typeof (data) === 'string') {
|
if (typeof (data) === 'string') {
|
||||||
if (encodeUTF8) {
|
if (encodeUTF8) {
|
||||||
@@ -13,5 +24,5 @@ export function convertBytesLikeToArrayBuffer(data: BytesLike, encodeUTF8 = true
|
|||||||
}
|
}
|
||||||
return new Uint8Array(data.split('').map((s) => s.codePointAt(0) as number)).buffer;
|
return new Uint8Array(data.split('').map((s) => s.codePointAt(0) as number)).buffer;
|
||||||
}
|
}
|
||||||
return data.buffer;
|
throw new Error('Unsupported BytesLike');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import type { BytesLike } from './BytesLike';
|
import type { BytesLike } from './BytesLike.js';
|
||||||
|
|
||||||
export function convertBytesLikeToUint8Array(data: BytesLike, encodeUTF8 = true): Uint8Array {
|
export function convertBytesLikeToUint8Array(data: BytesLike, encodeUTF8 = true): Uint8Array {
|
||||||
if (data instanceof Uint8Array) {
|
if (data instanceof Uint8Array) {
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import chai, { assert } from 'chai';
|
import chai, { assert } from 'chai';
|
||||||
import chaiBytes from 'chai-bytes';
|
import chaiBytes from 'chai-bytes';
|
||||||
import { bufferByteSize, LiteHashDRBG } from '../src/util/LiteHashDRBG';
|
import { bufferByteSize, LiteHashDRBG } from '../src/util/LiteHashDRBG.js';
|
||||||
import { RandUtil } from '../src/util/RandUtil';
|
import { RandUtil } from '../src/util/RandUtil.js';
|
||||||
import { convertBytesLikeToArrayBuffer } from '../src/util/convertBytesLikeToArrayBuffer';
|
import { convertBytesLikeToArrayBuffer } from '../src/util/convertBytesLikeToArrayBuffer.js';
|
||||||
import { convertBytesLikeToUint8Array as toBytes } from '../src/util/convertBytesLikeToUint8Array';
|
import { convertBytesLikeToUint8Array as toBytes } from '../src/util/convertBytesLikeToUint8Array.js';
|
||||||
import _ from 'lodash-es';
|
import _ from 'lodash-es';
|
||||||
|
|
||||||
chai.use(chaiBytes);
|
chai.use(chaiBytes);
|
||||||
|
|||||||
@@ -3,7 +3,20 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "dist",
|
"outDir": "dist",
|
||||||
"rootDir": "src",
|
"rootDir": "src",
|
||||||
"composite": true
|
"composite": true,
|
||||||
|
"module": "NodeNext",
|
||||||
|
"moduleResolution": "NodeNext",
|
||||||
|
"target": "ES2023",
|
||||||
|
"lib": ["ES2024"],
|
||||||
|
"verbatimModuleSyntax": true,
|
||||||
|
"noUncheckedIndexedAccess": true,
|
||||||
|
"exactOptionalPropertyTypes": true,
|
||||||
|
"noImplicitOverride": true,
|
||||||
|
"noImplicitReturns": true,
|
||||||
|
"noFallthroughCasesInSwitch": true,
|
||||||
|
"useUnknownInCatchVariables": true,
|
||||||
|
"noUnusedLocals": true,
|
||||||
|
"noUnusedParameters": true
|
||||||
},
|
},
|
||||||
"include": ["src"]
|
"include": ["src"]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user