shadowly 0.0.0 → 1.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.
- package/README.md +163 -1
- package/dist/class.d.ts +63 -0
- package/dist/class.js +172 -0
- package/dist/error.d.ts +4 -0
- package/dist/error.js +13 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +7 -0
- package/package.json +5 -4
- package/tsconfig.json +9 -25
- package/bun.lock +0 -26
- package/src/index.ts +0 -3
package/README.md
CHANGED
|
@@ -1,4 +1,166 @@
|
|
|
1
1
|
# Shadowly
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
TypeScript로 만든 체이닝 JSON 데이터베이스 모듈
|
|
4
4
|
|
|
5
|
+
## 시작하기
|
|
6
|
+
|
|
7
|
+
- 패키지 설치
|
|
8
|
+
> npm i shadowly
|
|
9
|
+
|
|
10
|
+
## 사용법
|
|
11
|
+
|
|
12
|
+
### 새 JSON 만들기
|
|
13
|
+
|
|
14
|
+
`generateNewJson` 함수로 JSON을 새로 만들 수 있습니다.
|
|
15
|
+
|파라메터|타입|설명|
|
|
16
|
+
|------|--------|-------|
|
|
17
|
+
|path|string|만들 파일 경로|
|
|
18
|
+
|isArray|boolean?|true면 배열 형식으로 생성|
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import Shadowly from 'shadowly';
|
|
22
|
+
|
|
23
|
+
// example.json을 Object 형식으로 새로 만듭니다. (파일 내용: {})
|
|
24
|
+
Shadowly.generateNewJson("./object.json");
|
|
25
|
+
|
|
26
|
+
// array.json을 Array 형식으로 새로 만듭니다. (파일 내용: [])
|
|
27
|
+
Shadowly.generateNewJson("./array.json", true);
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Shadowly 인스턴스 만들기
|
|
31
|
+
|
|
32
|
+
`new Shadowly()`로 Shadowly의 인스턴스를 새로 만들 수 있습니다.
|
|
33
|
+
|파라메터|타입|설명|
|
|
34
|
+
|------|--------|-------|
|
|
35
|
+
|path|string|JSON 파일 경로|
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
import Shadowly from 'shadowly';
|
|
39
|
+
|
|
40
|
+
// object.json을 읽어들여 Shadowly의 인스턴스를 새로 만듭니다.
|
|
41
|
+
new Shadowly("./object.json");
|
|
42
|
+
|
|
43
|
+
// JSON의 타입 정의를 할 수 있습니다.
|
|
44
|
+
new Shadowly<typeof import("./array.json")>("./array.json");
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### JSON의 값 가져오기
|
|
48
|
+
|
|
49
|
+
`get` 함수는 특정 키로 이동합니다.
|
|
50
|
+
|파라메터|타입|설명|
|
|
51
|
+
|------|--------|-------|
|
|
52
|
+
|key|string or number|키 이름입니다.|
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
import Shadowly from 'shadowly';
|
|
56
|
+
|
|
57
|
+
// key -> key2로 이동합니다.
|
|
58
|
+
new Shadowly("./object.json")
|
|
59
|
+
.get("key")
|
|
60
|
+
.get("key2");
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
`value` 함수는 이동한 키의 값을 가져옵니다.
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
import Shadowly from 'shadowly';
|
|
67
|
+
|
|
68
|
+
// key의 값을 가져옵니다.
|
|
69
|
+
new Shadowly("./object.json")
|
|
70
|
+
.get("key")
|
|
71
|
+
.value();
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### JSON에 값 쓰기
|
|
75
|
+
|
|
76
|
+
`set` 함수는 특정 키에 씁니다.
|
|
77
|
+
|파라메터|타입|설명|
|
|
78
|
+
|------|--------|-------|
|
|
79
|
+
|value|any|쓸 값입니다.|
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
import Shadowly from 'shadowly';
|
|
83
|
+
|
|
84
|
+
// key 안에 있는 key2에 value2를 씁니다.
|
|
85
|
+
new Shadowly("./object.json")
|
|
86
|
+
.get("key")
|
|
87
|
+
.get("key2")
|
|
88
|
+
.set("value2");
|
|
89
|
+
|
|
90
|
+
/*
|
|
91
|
+
결과:
|
|
92
|
+
{
|
|
93
|
+
"key": {
|
|
94
|
+
"key2": "value2"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
*/
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
`remove` 함수는 특정 키를 지웁니다.
|
|
101
|
+
|파라메터|타입|설명|
|
|
102
|
+
|------|--------|-------|
|
|
103
|
+
|key|string or number|키 이름입니다.|
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
import Shadowly from 'shadowly';
|
|
107
|
+
|
|
108
|
+
// key 안에 있는 key2를 지웁니다.
|
|
109
|
+
new Shadowly("./object.json")
|
|
110
|
+
.get("key")
|
|
111
|
+
.remove("key2");
|
|
112
|
+
|
|
113
|
+
/*
|
|
114
|
+
결과:
|
|
115
|
+
{
|
|
116
|
+
"key": {}
|
|
117
|
+
}
|
|
118
|
+
*/
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### 그 외
|
|
122
|
+
|
|
123
|
+
`back` 함수는 한 번 뒤로 갑니다.
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
import Shadowly from 'shadowly';
|
|
127
|
+
|
|
128
|
+
// key 안에 있는 값을 가져옵니다.
|
|
129
|
+
// key에서 key2로 이동 후 뒤로가기 한 다음 값 가져오기
|
|
130
|
+
new Shadowly("./object.json")
|
|
131
|
+
.get("key")
|
|
132
|
+
.get("key2")
|
|
133
|
+
.back()
|
|
134
|
+
.value();
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
`up` 함수는 여러 번 뒤로 갑니다.
|
|
138
|
+
|파라메터|타입|설명|
|
|
139
|
+
|------|--------|-------|
|
|
140
|
+
|steps|number?|뒤로 갈 횟수입니다.|
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
import Shadowly from 'shadowly';
|
|
144
|
+
|
|
145
|
+
// JSON 데이터를 가져옵니다.
|
|
146
|
+
// key에서 key2로 이동 후 뒤로 2번 이동 한 다음 값 가져오기
|
|
147
|
+
new Shadowly("./object.json")
|
|
148
|
+
.get("key")
|
|
149
|
+
.get("key2")
|
|
150
|
+
.up(2)
|
|
151
|
+
.value();
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
`root` 함수는 루트로 이동합니다.
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
import Shadowly from 'shadowly';
|
|
158
|
+
|
|
159
|
+
// JSON 데이터를 가져옵니다.
|
|
160
|
+
// key에서 key2로 이동 후 루트로 이동 한 다음 값 가져오기
|
|
161
|
+
new Shadowly("./object.json")
|
|
162
|
+
.get("key")
|
|
163
|
+
.get("key2")
|
|
164
|
+
.root()
|
|
165
|
+
.value();
|
|
166
|
+
```
|
package/dist/class.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
type GetKey<T> = T extends readonly any[] ? number : T extends object ? keyof T : never;
|
|
2
|
+
type GetValue<T, K> = T extends readonly (infer U)[] ? U : T extends Record<PropertyKey, any> ? (K extends keyof T ? T[K] : never) : never;
|
|
3
|
+
type RemoveKey<T> = T extends readonly any[] ? number : T extends object ? keyof T : never;
|
|
4
|
+
export default class Shadowly<TRoot, TNode = TRoot> {
|
|
5
|
+
readonly DB_PATH: string;
|
|
6
|
+
private readonly path;
|
|
7
|
+
private content;
|
|
8
|
+
private parent?;
|
|
9
|
+
private parentKey?;
|
|
10
|
+
/**
|
|
11
|
+
* Shadowly의 새 인스턴스를 만듭니다.
|
|
12
|
+
* @param path JSON 파일 경로
|
|
13
|
+
*/
|
|
14
|
+
constructor(path: string);
|
|
15
|
+
/**
|
|
16
|
+
* 새 JSON을 만듭니다.
|
|
17
|
+
* @param path JSON 파일 경로
|
|
18
|
+
* @param isArray true면 []를 쓰고, false면 {}를 씁니다.
|
|
19
|
+
*/
|
|
20
|
+
static generateNewJson(path: string, isArray?: boolean): void;
|
|
21
|
+
private static create;
|
|
22
|
+
/**
|
|
23
|
+
* key로 이동합니다.
|
|
24
|
+
* @param key 이동할 키 이름
|
|
25
|
+
* @returns 작업 수행 후 Shadowly 인스턴스
|
|
26
|
+
*/
|
|
27
|
+
get<K extends GetKey<TNode>>(key: K): Shadowly<TRoot, GetValue<TNode, K>>;
|
|
28
|
+
/**
|
|
29
|
+
* 현재 key의 value를 반환합니다.
|
|
30
|
+
* @returns 현재 key의 value
|
|
31
|
+
*/
|
|
32
|
+
value(): TNode;
|
|
33
|
+
/**
|
|
34
|
+
* 현재 key에 값을 씁니다.
|
|
35
|
+
* @param value 쓸 값
|
|
36
|
+
* @returns 작업 수행 후 Shadowly 인스턴스
|
|
37
|
+
*/
|
|
38
|
+
set(value: TNode): this;
|
|
39
|
+
/**
|
|
40
|
+
* key를 삭제합니다.
|
|
41
|
+
* @param key 삭제할 key
|
|
42
|
+
* @returns 작업 수행 후 Shadowly 인스턴스
|
|
43
|
+
*/
|
|
44
|
+
remove<K extends RemoveKey<TNode>>(key: K): this;
|
|
45
|
+
/**
|
|
46
|
+
* 한 번 뒤로 이동합니다.
|
|
47
|
+
* @returns 작업 수행 후 Shadowly 인스턴스
|
|
48
|
+
*/
|
|
49
|
+
back(): Shadowly<TRoot, any>;
|
|
50
|
+
/**
|
|
51
|
+
* steps만큼 뒤로 이동합니다.
|
|
52
|
+
* @param steps 이동할 횟수
|
|
53
|
+
* @returns 작업 수행 후 Shadowly 인스턴스
|
|
54
|
+
*/
|
|
55
|
+
up(steps?: number): Shadowly<TRoot, any>;
|
|
56
|
+
/**
|
|
57
|
+
* JSON의 루트로 이동합니다.
|
|
58
|
+
* @returns 작업 수행 후 Shadowly 인스턴스
|
|
59
|
+
*/
|
|
60
|
+
root(): Shadowly<TRoot, TRoot>;
|
|
61
|
+
private persist;
|
|
62
|
+
}
|
|
63
|
+
export {};
|
package/dist/class.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const fs = __importStar(require("node:fs"));
|
|
37
|
+
const error_1 = require("./error");
|
|
38
|
+
function isValidJson(text) {
|
|
39
|
+
if (typeof text !== "string")
|
|
40
|
+
return false;
|
|
41
|
+
try {
|
|
42
|
+
JSON.parse(text);
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
class Shadowly {
|
|
50
|
+
DB_PATH;
|
|
51
|
+
path;
|
|
52
|
+
content;
|
|
53
|
+
parent;
|
|
54
|
+
parentKey;
|
|
55
|
+
/**
|
|
56
|
+
* Shadowly의 새 인스턴스를 만듭니다.
|
|
57
|
+
* @param path JSON 파일 경로
|
|
58
|
+
*/
|
|
59
|
+
constructor(path) {
|
|
60
|
+
this.path = path;
|
|
61
|
+
this.DB_PATH = path;
|
|
62
|
+
if (!fs.existsSync(path))
|
|
63
|
+
throw new error_1.ShadowlyError("ENOTFOUND", path + " not found.");
|
|
64
|
+
const file = fs.readFileSync(path, "utf-8");
|
|
65
|
+
if (!isValidJson(file))
|
|
66
|
+
throw new error_1.ShadowlyError("EINVALID", path + " is not valid.");
|
|
67
|
+
this.content = JSON.parse(file);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 새 JSON을 만듭니다.
|
|
71
|
+
* @param path JSON 파일 경로
|
|
72
|
+
* @param isArray true면 []를 쓰고, false면 {}를 씁니다.
|
|
73
|
+
*/
|
|
74
|
+
static generateNewJson(path, isArray) {
|
|
75
|
+
fs.writeFileSync(path, isArray ? "[]" : "{}", "utf-8");
|
|
76
|
+
}
|
|
77
|
+
static create(DB_PATH, path, content, parent, parentKey) {
|
|
78
|
+
const inst = Object.create(Shadowly.prototype);
|
|
79
|
+
inst.DB_PATH = DB_PATH;
|
|
80
|
+
inst.path = path;
|
|
81
|
+
inst.content = content;
|
|
82
|
+
inst.parent = parent;
|
|
83
|
+
inst.parentKey = parentKey;
|
|
84
|
+
return inst;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* key로 이동합니다.
|
|
88
|
+
* @param key 이동할 키 이름
|
|
89
|
+
* @returns 작업 수행 후 Shadowly 인스턴스
|
|
90
|
+
*/
|
|
91
|
+
get(key) {
|
|
92
|
+
const nextContent = this.content[key];
|
|
93
|
+
return Shadowly.create(this.DB_PATH, this.path, nextContent, this, key);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 현재 key의 value를 반환합니다.
|
|
97
|
+
* @returns 현재 key의 value
|
|
98
|
+
*/
|
|
99
|
+
value() {
|
|
100
|
+
return this.content;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 현재 key에 값을 씁니다.
|
|
104
|
+
* @param value 쓸 값
|
|
105
|
+
* @returns 작업 수행 후 Shadowly 인스턴스
|
|
106
|
+
*/
|
|
107
|
+
set(value) {
|
|
108
|
+
this.content = value;
|
|
109
|
+
if (this.parent && this.parentKey !== undefined) {
|
|
110
|
+
this.parent.content[this.parentKey] = value;
|
|
111
|
+
}
|
|
112
|
+
this.persist();
|
|
113
|
+
return this;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* key를 삭제합니다.
|
|
117
|
+
* @param key 삭제할 key
|
|
118
|
+
* @returns 작업 수행 후 Shadowly 인스턴스
|
|
119
|
+
*/
|
|
120
|
+
remove(key) {
|
|
121
|
+
const cur = this.content;
|
|
122
|
+
if (Array.isArray(cur)) {
|
|
123
|
+
const idx = key;
|
|
124
|
+
if (Number.isInteger(idx) && idx >= 0 && idx < cur.length)
|
|
125
|
+
cur.splice(idx, 1);
|
|
126
|
+
}
|
|
127
|
+
else if (cur && typeof cur === "object") {
|
|
128
|
+
delete cur[key];
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
throw new error_1.ShadowlyError("ETYPE", "Current value is not an object/array.");
|
|
132
|
+
}
|
|
133
|
+
this.persist();
|
|
134
|
+
return this;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* 한 번 뒤로 이동합니다.
|
|
138
|
+
* @returns 작업 수행 후 Shadowly 인스턴스
|
|
139
|
+
*/
|
|
140
|
+
back() {
|
|
141
|
+
return this.parent ?? this;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* steps만큼 뒤로 이동합니다.
|
|
145
|
+
* @param steps 이동할 횟수
|
|
146
|
+
* @returns 작업 수행 후 Shadowly 인스턴스
|
|
147
|
+
*/
|
|
148
|
+
up(steps = 1) {
|
|
149
|
+
let cur = this;
|
|
150
|
+
for (let i = 0; i < steps; i++) {
|
|
151
|
+
if (!cur.parent)
|
|
152
|
+
break;
|
|
153
|
+
cur = cur.parent;
|
|
154
|
+
}
|
|
155
|
+
return cur;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* JSON의 루트로 이동합니다.
|
|
159
|
+
* @returns 작업 수행 후 Shadowly 인스턴스
|
|
160
|
+
*/
|
|
161
|
+
root() {
|
|
162
|
+
let cur = this;
|
|
163
|
+
while (cur.parent)
|
|
164
|
+
cur = cur.parent;
|
|
165
|
+
return cur;
|
|
166
|
+
}
|
|
167
|
+
persist() {
|
|
168
|
+
const r = this.root();
|
|
169
|
+
fs.writeFileSync(r.DB_PATH, JSON.stringify(r.content, null, 2), "utf-8");
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
exports.default = Shadowly;
|
package/dist/error.d.ts
ADDED
package/dist/error.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ShadowlyError = void 0;
|
|
4
|
+
class ShadowlyError extends Error {
|
|
5
|
+
code;
|
|
6
|
+
constructor(code, message) {
|
|
7
|
+
super(code + ": " + message);
|
|
8
|
+
this.name = "Shadowly";
|
|
9
|
+
this.code = code;
|
|
10
|
+
Error.captureStackTrace(this, this.constructor);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.ShadowlyError = ShadowlyError;
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const class_1 = __importDefault(require("./class"));
|
|
7
|
+
exports.default = class_1.default;
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shadowly",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "TypeScript JSON Database",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"database",
|
|
7
7
|
"json",
|
|
8
|
-
"typescript"
|
|
8
|
+
"typescript",
|
|
9
|
+
"cli"
|
|
9
10
|
],
|
|
10
11
|
"homepage": "https://github.com/Pro203S/Shadowly#readme",
|
|
11
12
|
"bugs": {
|
|
@@ -18,7 +19,7 @@
|
|
|
18
19
|
"license": "MIT",
|
|
19
20
|
"author": "Pro203S",
|
|
20
21
|
"type": "module",
|
|
21
|
-
"main": "
|
|
22
|
+
"main": "./dist/index.js",
|
|
22
23
|
"scripts": {
|
|
23
24
|
"build": "tsc"
|
|
24
25
|
},
|
|
@@ -28,4 +29,4 @@
|
|
|
28
29
|
"peerDependencies": {
|
|
29
30
|
"typescript": "^5"
|
|
30
31
|
}
|
|
31
|
-
}
|
|
32
|
+
}
|
package/tsconfig.json
CHANGED
|
@@ -1,29 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
|
-
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"jsx": "react-jsx",
|
|
9
|
-
"allowJs": true,
|
|
10
|
-
|
|
11
|
-
// Bundler mode
|
|
12
|
-
"moduleResolution": "bundler",
|
|
13
|
-
"allowImportingTsExtensions": true,
|
|
14
|
-
"verbatimModuleSyntax": true,
|
|
15
|
-
"noEmit": true,
|
|
16
|
-
|
|
17
|
-
// Best practices
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "CommonJS",
|
|
5
|
+
"rootDir": "src",
|
|
6
|
+
"outDir": "dist",
|
|
7
|
+
"declaration": true,
|
|
18
8
|
"strict": true,
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
// Some stricter flags (disabled by default)
|
|
25
|
-
"noUnusedLocals": false,
|
|
26
|
-
"noUnusedParameters": false,
|
|
27
|
-
"noPropertyAccessFromIndexSignature": false
|
|
28
|
-
}
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"resolveJsonModule": true
|
|
11
|
+
},
|
|
12
|
+
"exclude": ["tests/", "dist/"]
|
|
29
13
|
}
|
package/bun.lock
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"lockfileVersion": 1,
|
|
3
|
-
"configVersion": 1,
|
|
4
|
-
"workspaces": {
|
|
5
|
-
"": {
|
|
6
|
-
"name": "shadowly",
|
|
7
|
-
"devDependencies": {
|
|
8
|
-
"@types/bun": "latest",
|
|
9
|
-
},
|
|
10
|
-
"peerDependencies": {
|
|
11
|
-
"typescript": "^5",
|
|
12
|
-
},
|
|
13
|
-
},
|
|
14
|
-
},
|
|
15
|
-
"packages": {
|
|
16
|
-
"@types/bun": ["@types/bun@1.3.6", "", { "dependencies": { "bun-types": "1.3.6" } }, "sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA=="],
|
|
17
|
-
|
|
18
|
-
"@types/node": ["@types/node@25.0.10", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg=="],
|
|
19
|
-
|
|
20
|
-
"bun-types": ["bun-types@1.3.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ=="],
|
|
21
|
-
|
|
22
|
-
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
|
|
23
|
-
|
|
24
|
-
"undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
|
|
25
|
-
}
|
|
26
|
-
}
|
package/src/index.ts
DELETED