├── .gitignore
├── .node-version
├── LICENSE
├── README.md
├── index.ts
├── package-lock.json
├── package.json
└── tsconfig.json
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | index.js
3 | index.cjs*
4 | index.esm.js*
5 | index.d.ts
--------------------------------------------------------------------------------
/.node-version:
--------------------------------------------------------------------------------
1 | 18.17.0
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 toshusai
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # One
2 |
3 | ## What is One?
4 |
5 | https://toshusai.github.io/one-docs/
6 |
7 | One is a lightweight, easy-to-use framework for building web applications that is simple, transparent, and fast. It consists of a single class contained in a single file of 1.7KB and requires zero dependencies and no build step.
8 |
9 | ## Overview
10 |
11 | One is a lightweight framework that makes it easy to build web applications with its focus on simplicity and transparency. The entire framework is contained within a single class, making it easy to use and understand. At only 11KB TypeScript in size (1.7KB JavaScript when gzip compressed), the class includes implementation of basic features found in modern frameworks, such as if statements, for loops, slots, and props. With zero dependencies and no build step required, One is a great choice for building small to medium-sized web applications.
12 |
13 | ## How to use
14 |
15 | Installation
16 |
17 | ```bash
18 | npm install @toshusai/one
19 | ```
20 |
21 | ## Usage
22 |
23 | To use One, simply inherit the One class and implement the template method.
24 |
25 | ```ts
26 | import { One } from "@toshusai/one";
27 |
28 | export class BasicComponent extends One {
29 | render() {
30 | return `
Hello World!
`;
31 | }
32 |
33 | mounted() {
34 | console.log("Can you see me in the console?");
35 | }
36 | }
37 | ```
38 |
39 | To initialize the application, create an instance and pass the root HTMLElement as an argument to the mount method.
40 |
41 | ```ts
42 | const element = document.getElementById("app")!;
43 | new BasicComponent().mount(element);
44 | ```
45 |
46 | ## Features
47 |
48 | One supports the following features:
49 |
50 | - `-if` for if statements
51 | - `-for` for for loops
52 | - `` for multiple slots
53 | - `:value="value"` for two-way binding
54 | - `@click="onClick"` for event listeners
55 |
56 | ## Documentation
57 |
58 | documentation is available on the GitHub Pages site.
59 | https://toshusai.github.io/one-docs/
60 |
61 | documentation source code is available on GitHub
62 | https://github.com/toshusai/one-docs
63 |
64 | ## License
65 |
66 | MIT License
67 |
--------------------------------------------------------------------------------
/index.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * the One
3 | */
4 | export class One {
5 | /**
6 | * The dependencies of the component
7 | */
8 | public deps: Record = {};
9 |
10 | public els: HTMLElement[] = [];
11 |
12 | /**
13 | * Render the component
14 | * @param el
15 | * @param parent
16 | * @param slots
17 | * @returns
18 | */
19 | public mount(
20 | el: HTMLElement,
21 | parent?: One,
22 | slots?: Record
23 | ) {
24 | this._i();
25 | const res = this._h(el, true, {}, parent, slots);
26 | this.mounted();
27 | return res;
28 | }
29 |
30 | /**
31 | * Emit a event to parent
32 | * @param name
33 | * @param value
34 | */
35 | protected emit(name: string, value: any) {
36 | this._emits.dispatchEvent(new CustomEvent(name, { detail: value }));
37 | }
38 |
39 | /**
40 | * The template of the component
41 | */
42 | protected render() {
43 | return ``;
44 | }
45 |
46 | /**
47 | * The lifecycle hook that is called when the component is mounted
48 | */
49 | protected mounted() {}
50 |
51 | /**
52 | * The EventTarget that inside the component
53 | */
54 | private _event = new EventTarget();
55 |
56 | /**
57 | * The EventTarget that between parent and child
58 | */
59 | private _emits = new EventTarget();
60 |
61 | /**
62 | * Initialize the component
63 | */
64 | private _i() {
65 | const props = Object.keys(this);
66 | props.map((p) => {
67 | if (p.startsWith("_") || p === "deps") return;
68 | this._r(p);
69 | });
70 | }
71 |
72 | /**
73 | * Add a Event listener
74 | * @param event
75 | * @param callback
76 | */
77 | private _ae(callback: () => void) {
78 | this._event.addEventListener("change", callback);
79 | }
80 |
81 | /**
82 | * Dispatch Event
83 | * @param value
84 | */
85 | private _de() {
86 | this._event.dispatchEvent(new CustomEvent("change"));
87 | }
88 |
89 | /**
90 | * Handle a element
91 | * @param el
92 | * @param isRoot
93 | * @param scopeObj
94 | * @param parent
95 | * @param slots
96 | * @returns
97 | */
98 | private _h(
99 | el: HTMLElement,
100 | isRoot: boolean,
101 | scopeObj: Record,
102 | parent?: One,
103 | slots?: Record
104 | ): Record | undefined {
105 | if (el.nodeType == 8) return;
106 |
107 | if (isRoot) {
108 | el.innerHTML = this.render();
109 | this._de();
110 | }
111 | let attrs = el.getAttributeNames();
112 | let end = false;
113 | attrs.forEach((attr) => {
114 | if (end) return;
115 | const attrValue = el.getAttribute(attr);
116 | if (attrValue === null) return;
117 | if (attr.startsWith(":")) {
118 | const isTwoWay = attr.startsWith("::");
119 | el.removeAttribute(attr);
120 | attr = attr
121 | .replace(/:/g, "")
122 | .replace(/-([a-z])/g, (g) => g[1].toUpperCase());
123 | const propertyName = attr as keyof this;
124 | if (parent && this[propertyName] !== undefined) {
125 | const handleChange = () => {
126 | this._event.removeEventListener("change", handleChange);
127 | parent._event.removeEventListener("change", handleChange);
128 | const parentKey = attrValue as keyof One;
129 | if (isTwoWay && parent[parentKey]) {
130 | parent[parentKey] = this[propertyName] as any;
131 | } else {
132 | this[propertyName] = parent._f(attrValue as string, scopeObj);
133 | }
134 | this._ae(handleChange);
135 | parent._ae(handleChange);
136 | };
137 | this[propertyName] = parent._f(attrValue as string, scopeObj);
138 | this._ae(handleChange);
139 | parent._ae(handleChange);
140 | } else {
141 | const handleChange = () => {
142 | const propertyValue = this._f(attrValue, scopeObj);
143 | if (typeof propertyValue == "boolean") {
144 | if (propertyValue) {
145 | el.setAttribute(attr, "");
146 | } else {
147 | el.removeAttribute(attr);
148 | }
149 | } else if (
150 | typeof propertyValue == "string" ||
151 | typeof propertyValue == "number"
152 | ) {
153 | el.setAttribute(attr, `${propertyValue}`);
154 | } else {
155 | el.removeAttribute(attr);
156 | }
157 | };
158 | handleChange();
159 | this._ae(handleChange);
160 | }
161 | } else if (attr.startsWith("@") && typeof attrValue == "string") {
162 | el.removeAttribute(attr);
163 | const eventAttr = attr
164 | .replace("@", "")
165 | .replace(/-([a-z])/g, (g) => g[1].toUpperCase());
166 | if (parent) {
167 | this._emits.addEventListener(eventAttr, (e) => {
168 | const customEvent = e as CustomEvent;
169 | parent._f(attrValue, scopeObj).call(parent, customEvent.detail);
170 | });
171 | } else {
172 | el.addEventListener(eventAttr, (e) => {
173 | this._f(attrValue, scopeObj).call(this, e);
174 | });
175 | }
176 | el.removeAttribute(attr);
177 | } else if (attr == "-text" && typeof attrValue == "string") {
178 | el.removeAttribute(attr);
179 | const handleChange = () => {
180 | el.innerHTML = this._f(attrValue, scopeObj);
181 | };
182 | this._ae(handleChange);
183 | handleChange();
184 | } else if (attr == "-if" && typeof attrValue == "string") {
185 | el.removeAttribute(attr);
186 | const parentNode = el.parentNode;
187 | if (!parentNode) return;
188 | let ifComment = document.createComment("if");
189 | const isTrue = this._f(attrValue, scopeObj);
190 | const hide = () => {
191 | parentNode.insertBefore(ifComment, el);
192 | el = parentNode.removeChild(el);
193 | };
194 | if (!isTrue) hide();
195 |
196 | let prevIsTrue = isTrue;
197 | this._ae(() => {
198 | const isTrue = this._f(attrValue, scopeObj);
199 | if (prevIsTrue === isTrue) return;
200 | prevIsTrue = isTrue;
201 | if (isTrue) {
202 | const parentNode = ifComment.parentNode;
203 | if (!parentNode) return;
204 | parentNode?.insertBefore(el, ifComment);
205 | ifComment = parentNode.removeChild(ifComment);
206 | } else {
207 | const parentNode = el.parentNode;
208 | if (!parentNode) return;
209 | hide();
210 | }
211 | });
212 | } else if (attr == "-for") {
213 | el.removeAttribute(attr);
214 | let f = attrValue.split(" in ");
215 | let tmpl = el.cloneNode(true) as HTMLElement;
216 | tmpl.removeAttribute("-for");
217 | let scopeObject: any = {};
218 | const parentNode = el.parentNode;
219 | if (!parentNode) return;
220 | let forStart = document.createComment("for-s");
221 | parentNode.insertBefore(forStart, el);
222 | let forEnd = document.createComment("for-e");
223 | parentNode.insertBefore(forEnd, el.nextSibling);
224 | el = parentNode.removeChild(el);
225 | const onChange = () => {
226 | let endIndex = Array.prototype.indexOf.call(
227 | parentNode.childNodes,
228 | forEnd
229 | );
230 | let startIndex = Array.prototype.indexOf.call(
231 | parentNode.childNodes,
232 | forEnd
233 | );
234 | for (let i = endIndex - 1; i > startIndex + 1; i--) {
235 | parentNode.removeChild(parentNode.childNodes[i]);
236 | }
237 | for (let i of this._f(f[1], scopeObject)) {
238 | let cx = tmpl.cloneNode(true) as HTMLElement;
239 | if (cx) {
240 | forEnd.parentNode?.insertBefore(cx, forEnd);
241 | scopeObject[f[0]] = i;
242 | this._h(cx as HTMLElement, false, scopeObject, undefined, slots);
243 | }
244 | }
245 | };
246 | this._ae(onChange);
247 | onChange();
248 | end = true;
249 | } else {
250 | const propertyName = attr as keyof this;
251 | if (typeof this[propertyName] == "string") {
252 | this[propertyName] = attrValue as any;
253 | }
254 | }
255 | });
256 |
257 | if (!end) {
258 | this._hc(el, scopeObj, slots);
259 | }
260 | if (el.tagName.startsWith("SLOT") && slots) {
261 | const slotSuffix = el.tagName.replace("SLOT", "");
262 | el.innerHTML = "";
263 | let key = slotSuffix === "" ? "" : slotSuffix;
264 | if (slots[key]) {
265 | el.append(...slots[key]);
266 | }
267 | }
268 |
269 | if (el.tagName.startsWith(`TPL`)) {
270 | const children: HTMLElement[] = [];
271 | for (let i = 0; i < el.childNodes.length; i++) {
272 | children.push(el.childNodes[i] as HTMLElement);
273 | }
274 | const parent = el.parentNode;
275 | if (!parent) return;
276 | parent.removeChild(el);
277 | return {
278 | [el.tagName.replace(`TPL`, "")]: children,
279 | };
280 | }
281 | if ((isRoot && el.tagName != "DIV") || el.tagName.startsWith("SLOT")) {
282 | const children: HTMLElement[] = [];
283 | const parent = el.parentNode;
284 | if (!parent) return;
285 | const l = el.childNodes.length;
286 | for (let i = 0; i < l; i++) {
287 | children.push(parent.insertBefore(el.childNodes[0], el) as HTMLElement);
288 | }
289 | parent.removeChild(el);
290 | this.els = children;
291 | return { "": children };
292 | }
293 | return { "": [el] };
294 | }
295 |
296 | /**
297 | * eval Function
298 | * @param src
299 | * @param scopeObj
300 | * @returns
301 | */
302 | private _f(src: string, scopeObj: any) {
303 | const props = Object.getOwnPropertyNames(this);
304 | let funcs = Object.getOwnPropertyNames(Object.getPrototypeOf(this));
305 | const scopeKeys = Object.keys(scopeObj ?? {});
306 | return new Function(...props, ...funcs, ...scopeKeys, `return ${src}`)(
307 | ...props.map((p) => this[p as keyof One]),
308 | ...funcs.map((f) => this[f as keyof One]),
309 | ...scopeKeys.map((k) => scopeObj[k])
310 | );
311 | }
312 |
313 | /**
314 | * Merge Slots
315 | * @param a
316 | * @param b
317 | * @returns
318 | */
319 | private _ms(a: Record, b: Record) {
320 | const keys = Object.keys(a);
321 | const keys2 = Object.keys(b);
322 | const allKeys = [...keys, ...keys2];
323 | const ret: Record = {};
324 | allKeys.forEach((k) => {
325 | ret[k] = [...(a[k] ?? []), ...(b[k] ?? [])];
326 | });
327 | return ret;
328 | }
329 |
330 | /**
331 | * Handle Children
332 | * @param el
333 | * @param scopeObj
334 | * @param slots
335 | * @returns
336 | */
337 | private _hc(
338 | el: HTMLElement,
339 | scopeObj: Record,
340 | slots?: Record
341 | ): Record {
342 | const l = el.childNodes.length;
343 | const allChildren: ChildNode[] = [];
344 | let newSlots: Record = {};
345 | for (let i = 0; i < l; i++) {
346 | const child = el.childNodes[i];
347 | allChildren.push(child);
348 | }
349 | allChildren.forEach((child) => {
350 | const lowerTagName =
351 | child instanceof HTMLElement ? child.tagName.toLowerCase() : "";
352 | const Class = this.deps[lowerTagName];
353 | if (Class) {
354 | const c = new Class();
355 | Object.keys(this.deps).forEach((k) => {
356 | if (c.deps[k]) return;
357 | c.deps[k] = this.deps[k];
358 | });
359 |
360 | let childSlots = {};
361 | if (child instanceof HTMLElement) {
362 | childSlots =
363 | c.mount(
364 | child,
365 | this,
366 | this._ms(slots ?? {}, this._hc(child, scopeObj, slots))
367 | ) ?? {};
368 | } else {
369 | childSlots = { "": [child] };
370 | }
371 | if (childSlots) {
372 | newSlots = this._ms(newSlots, childSlots);
373 | }
374 | } else {
375 | const childSlots =
376 | child instanceof HTMLElement
377 | ? this._h(child, false, scopeObj, undefined, slots)
378 | : { "": [child] };
379 | if (childSlots) {
380 | newSlots = this._ms(newSlots, childSlots);
381 | }
382 | }
383 | });
384 | return newSlots;
385 | }
386 |
387 | /**
388 | * convert to Reactive
389 | * @param name property name
390 | * @returns
391 | */
392 | private _r(name: string) {
393 | let _internal = this[name as keyof this] as any;
394 | if (typeof _internal === "function") return;
395 | if (typeof _internal === "object") {
396 | const handler: ProxyHandler = {
397 | get: (obj, k) => new Proxy(obj[k], handler),
398 | };
399 | this[name as keyof this] = new Proxy(_internal, {
400 | get(obj, k) {
401 | if (typeof obj[k] == "object") {
402 | return new Proxy(obj[k], handler);
403 | }
404 | return obj[k];
405 | },
406 | set: (obj, k, v) => {
407 | obj[k] = v;
408 | this._de();
409 | return true;
410 | },
411 | });
412 | } else {
413 | Object.defineProperty(this, name, {
414 | get: () => {
415 | return _internal;
416 | },
417 | set: (value: any) => {
418 | _internal = value;
419 | this._de();
420 | },
421 | });
422 | }
423 | }
424 | }
425 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@toshusai/one",
3 | "version": "1.0.0-alpha.4",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "@toshusai/one",
9 | "version": "1.0.0-alpha.4",
10 | "license": "MIT",
11 | "devDependencies": {
12 | "esbuild": "^0.17.15",
13 | "typescript": "^5.0.3"
14 | }
15 | },
16 | "node_modules/@esbuild/android-arm": {
17 | "version": "0.17.15",
18 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.15.tgz",
19 | "integrity": "sha512-sRSOVlLawAktpMvDyJIkdLI/c/kdRTOqo8t6ImVxg8yT7LQDUYV5Rp2FKeEosLr6ZCja9UjYAzyRSxGteSJPYg==",
20 | "cpu": [
21 | "arm"
22 | ],
23 | "dev": true,
24 | "optional": true,
25 | "os": [
26 | "android"
27 | ],
28 | "engines": {
29 | "node": ">=12"
30 | }
31 | },
32 | "node_modules/@esbuild/android-arm64": {
33 | "version": "0.17.15",
34 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.15.tgz",
35 | "integrity": "sha512-0kOB6Y7Br3KDVgHeg8PRcvfLkq+AccreK///B4Z6fNZGr/tNHX0z2VywCc7PTeWp+bPvjA5WMvNXltHw5QjAIA==",
36 | "cpu": [
37 | "arm64"
38 | ],
39 | "dev": true,
40 | "optional": true,
41 | "os": [
42 | "android"
43 | ],
44 | "engines": {
45 | "node": ">=12"
46 | }
47 | },
48 | "node_modules/@esbuild/android-x64": {
49 | "version": "0.17.15",
50 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.15.tgz",
51 | "integrity": "sha512-MzDqnNajQZ63YkaUWVl9uuhcWyEyh69HGpMIrf+acR4otMkfLJ4sUCxqwbCyPGicE9dVlrysI3lMcDBjGiBBcQ==",
52 | "cpu": [
53 | "x64"
54 | ],
55 | "dev": true,
56 | "optional": true,
57 | "os": [
58 | "android"
59 | ],
60 | "engines": {
61 | "node": ">=12"
62 | }
63 | },
64 | "node_modules/@esbuild/darwin-arm64": {
65 | "version": "0.17.15",
66 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.15.tgz",
67 | "integrity": "sha512-7siLjBc88Z4+6qkMDxPT2juf2e8SJxmsbNVKFY2ifWCDT72v5YJz9arlvBw5oB4W/e61H1+HDB/jnu8nNg0rLA==",
68 | "cpu": [
69 | "arm64"
70 | ],
71 | "dev": true,
72 | "optional": true,
73 | "os": [
74 | "darwin"
75 | ],
76 | "engines": {
77 | "node": ">=12"
78 | }
79 | },
80 | "node_modules/@esbuild/darwin-x64": {
81 | "version": "0.17.15",
82 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.15.tgz",
83 | "integrity": "sha512-NbImBas2rXwYI52BOKTW342Tm3LTeVlaOQ4QPZ7XuWNKiO226DisFk/RyPk3T0CKZkKMuU69yOvlapJEmax7cg==",
84 | "cpu": [
85 | "x64"
86 | ],
87 | "dev": true,
88 | "optional": true,
89 | "os": [
90 | "darwin"
91 | ],
92 | "engines": {
93 | "node": ">=12"
94 | }
95 | },
96 | "node_modules/@esbuild/freebsd-arm64": {
97 | "version": "0.17.15",
98 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.15.tgz",
99 | "integrity": "sha512-Xk9xMDjBVG6CfgoqlVczHAdJnCs0/oeFOspFap5NkYAmRCT2qTn1vJWA2f419iMtsHSLm+O8B6SLV/HlY5cYKg==",
100 | "cpu": [
101 | "arm64"
102 | ],
103 | "dev": true,
104 | "optional": true,
105 | "os": [
106 | "freebsd"
107 | ],
108 | "engines": {
109 | "node": ">=12"
110 | }
111 | },
112 | "node_modules/@esbuild/freebsd-x64": {
113 | "version": "0.17.15",
114 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.15.tgz",
115 | "integrity": "sha512-3TWAnnEOdclvb2pnfsTWtdwthPfOz7qAfcwDLcfZyGJwm1SRZIMOeB5FODVhnM93mFSPsHB9b/PmxNNbSnd0RQ==",
116 | "cpu": [
117 | "x64"
118 | ],
119 | "dev": true,
120 | "optional": true,
121 | "os": [
122 | "freebsd"
123 | ],
124 | "engines": {
125 | "node": ">=12"
126 | }
127 | },
128 | "node_modules/@esbuild/linux-arm": {
129 | "version": "0.17.15",
130 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.15.tgz",
131 | "integrity": "sha512-MLTgiXWEMAMr8nmS9Gigx43zPRmEfeBfGCwxFQEMgJ5MC53QKajaclW6XDPjwJvhbebv+RzK05TQjvH3/aM4Xw==",
132 | "cpu": [
133 | "arm"
134 | ],
135 | "dev": true,
136 | "optional": true,
137 | "os": [
138 | "linux"
139 | ],
140 | "engines": {
141 | "node": ">=12"
142 | }
143 | },
144 | "node_modules/@esbuild/linux-arm64": {
145 | "version": "0.17.15",
146 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.15.tgz",
147 | "integrity": "sha512-T0MVnYw9KT6b83/SqyznTs/3Jg2ODWrZfNccg11XjDehIved2oQfrX/wVuev9N936BpMRaTR9I1J0tdGgUgpJA==",
148 | "cpu": [
149 | "arm64"
150 | ],
151 | "dev": true,
152 | "optional": true,
153 | "os": [
154 | "linux"
155 | ],
156 | "engines": {
157 | "node": ">=12"
158 | }
159 | },
160 | "node_modules/@esbuild/linux-ia32": {
161 | "version": "0.17.15",
162 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.15.tgz",
163 | "integrity": "sha512-wp02sHs015T23zsQtU4Cj57WiteiuASHlD7rXjKUyAGYzlOKDAjqK6bk5dMi2QEl/KVOcsjwL36kD+WW7vJt8Q==",
164 | "cpu": [
165 | "ia32"
166 | ],
167 | "dev": true,
168 | "optional": true,
169 | "os": [
170 | "linux"
171 | ],
172 | "engines": {
173 | "node": ">=12"
174 | }
175 | },
176 | "node_modules/@esbuild/linux-loong64": {
177 | "version": "0.17.15",
178 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.15.tgz",
179 | "integrity": "sha512-k7FsUJjGGSxwnBmMh8d7IbObWu+sF/qbwc+xKZkBe/lTAF16RqxRCnNHA7QTd3oS2AfGBAnHlXL67shV5bBThQ==",
180 | "cpu": [
181 | "loong64"
182 | ],
183 | "dev": true,
184 | "optional": true,
185 | "os": [
186 | "linux"
187 | ],
188 | "engines": {
189 | "node": ">=12"
190 | }
191 | },
192 | "node_modules/@esbuild/linux-mips64el": {
193 | "version": "0.17.15",
194 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.15.tgz",
195 | "integrity": "sha512-ZLWk6czDdog+Q9kE/Jfbilu24vEe/iW/Sj2d8EVsmiixQ1rM2RKH2n36qfxK4e8tVcaXkvuV3mU5zTZviE+NVQ==",
196 | "cpu": [
197 | "mips64el"
198 | ],
199 | "dev": true,
200 | "optional": true,
201 | "os": [
202 | "linux"
203 | ],
204 | "engines": {
205 | "node": ">=12"
206 | }
207 | },
208 | "node_modules/@esbuild/linux-ppc64": {
209 | "version": "0.17.15",
210 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.15.tgz",
211 | "integrity": "sha512-mY6dPkIRAiFHRsGfOYZC8Q9rmr8vOBZBme0/j15zFUKM99d4ILY4WpOC7i/LqoY+RE7KaMaSfvY8CqjJtuO4xg==",
212 | "cpu": [
213 | "ppc64"
214 | ],
215 | "dev": true,
216 | "optional": true,
217 | "os": [
218 | "linux"
219 | ],
220 | "engines": {
221 | "node": ">=12"
222 | }
223 | },
224 | "node_modules/@esbuild/linux-riscv64": {
225 | "version": "0.17.15",
226 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.15.tgz",
227 | "integrity": "sha512-EcyUtxffdDtWjjwIH8sKzpDRLcVtqANooMNASO59y+xmqqRYBBM7xVLQhqF7nksIbm2yHABptoioS9RAbVMWVA==",
228 | "cpu": [
229 | "riscv64"
230 | ],
231 | "dev": true,
232 | "optional": true,
233 | "os": [
234 | "linux"
235 | ],
236 | "engines": {
237 | "node": ">=12"
238 | }
239 | },
240 | "node_modules/@esbuild/linux-s390x": {
241 | "version": "0.17.15",
242 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.15.tgz",
243 | "integrity": "sha512-BuS6Jx/ezxFuHxgsfvz7T4g4YlVrmCmg7UAwboeyNNg0OzNzKsIZXpr3Sb/ZREDXWgt48RO4UQRDBxJN3B9Rbg==",
244 | "cpu": [
245 | "s390x"
246 | ],
247 | "dev": true,
248 | "optional": true,
249 | "os": [
250 | "linux"
251 | ],
252 | "engines": {
253 | "node": ">=12"
254 | }
255 | },
256 | "node_modules/@esbuild/linux-x64": {
257 | "version": "0.17.15",
258 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.15.tgz",
259 | "integrity": "sha512-JsdS0EgEViwuKsw5tiJQo9UdQdUJYuB+Mf6HxtJSPN35vez1hlrNb1KajvKWF5Sa35j17+rW1ECEO9iNrIXbNg==",
260 | "cpu": [
261 | "x64"
262 | ],
263 | "dev": true,
264 | "optional": true,
265 | "os": [
266 | "linux"
267 | ],
268 | "engines": {
269 | "node": ">=12"
270 | }
271 | },
272 | "node_modules/@esbuild/netbsd-x64": {
273 | "version": "0.17.15",
274 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.15.tgz",
275 | "integrity": "sha512-R6fKjtUysYGym6uXf6qyNephVUQAGtf3n2RCsOST/neIwPqRWcnc3ogcielOd6pT+J0RDR1RGcy0ZY7d3uHVLA==",
276 | "cpu": [
277 | "x64"
278 | ],
279 | "dev": true,
280 | "optional": true,
281 | "os": [
282 | "netbsd"
283 | ],
284 | "engines": {
285 | "node": ">=12"
286 | }
287 | },
288 | "node_modules/@esbuild/openbsd-x64": {
289 | "version": "0.17.15",
290 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.15.tgz",
291 | "integrity": "sha512-mVD4PGc26b8PI60QaPUltYKeSX0wxuy0AltC+WCTFwvKCq2+OgLP4+fFd+hZXzO2xW1HPKcytZBdjqL6FQFa7w==",
292 | "cpu": [
293 | "x64"
294 | ],
295 | "dev": true,
296 | "optional": true,
297 | "os": [
298 | "openbsd"
299 | ],
300 | "engines": {
301 | "node": ">=12"
302 | }
303 | },
304 | "node_modules/@esbuild/sunos-x64": {
305 | "version": "0.17.15",
306 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.15.tgz",
307 | "integrity": "sha512-U6tYPovOkw3459t2CBwGcFYfFRjivcJJc1WC8Q3funIwX8x4fP+R6xL/QuTPNGOblbq/EUDxj9GU+dWKX0oWlQ==",
308 | "cpu": [
309 | "x64"
310 | ],
311 | "dev": true,
312 | "optional": true,
313 | "os": [
314 | "sunos"
315 | ],
316 | "engines": {
317 | "node": ">=12"
318 | }
319 | },
320 | "node_modules/@esbuild/win32-arm64": {
321 | "version": "0.17.15",
322 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.15.tgz",
323 | "integrity": "sha512-W+Z5F++wgKAleDABemiyXVnzXgvRFs+GVKThSI+mGgleLWluv0D7Diz4oQpgdpNzh4i2nNDzQtWbjJiqutRp6Q==",
324 | "cpu": [
325 | "arm64"
326 | ],
327 | "dev": true,
328 | "optional": true,
329 | "os": [
330 | "win32"
331 | ],
332 | "engines": {
333 | "node": ">=12"
334 | }
335 | },
336 | "node_modules/@esbuild/win32-ia32": {
337 | "version": "0.17.15",
338 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.15.tgz",
339 | "integrity": "sha512-Muz/+uGgheShKGqSVS1KsHtCyEzcdOn/W/Xbh6H91Etm+wiIfwZaBn1W58MeGtfI8WA961YMHFYTthBdQs4t+w==",
340 | "cpu": [
341 | "ia32"
342 | ],
343 | "dev": true,
344 | "optional": true,
345 | "os": [
346 | "win32"
347 | ],
348 | "engines": {
349 | "node": ">=12"
350 | }
351 | },
352 | "node_modules/@esbuild/win32-x64": {
353 | "version": "0.17.15",
354 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.15.tgz",
355 | "integrity": "sha512-DjDa9ywLUUmjhV2Y9wUTIF+1XsmuFGvZoCmOWkli1XcNAh5t25cc7fgsCx4Zi/Uurep3TTLyDiKATgGEg61pkA==",
356 | "cpu": [
357 | "x64"
358 | ],
359 | "dev": true,
360 | "optional": true,
361 | "os": [
362 | "win32"
363 | ],
364 | "engines": {
365 | "node": ">=12"
366 | }
367 | },
368 | "node_modules/esbuild": {
369 | "version": "0.17.15",
370 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.15.tgz",
371 | "integrity": "sha512-LBUV2VsUIc/iD9ME75qhT4aJj0r75abCVS0jakhFzOtR7TQsqQA5w0tZ+KTKnwl3kXE0MhskNdHDh/I5aCR1Zw==",
372 | "dev": true,
373 | "hasInstallScript": true,
374 | "bin": {
375 | "esbuild": "bin/esbuild"
376 | },
377 | "engines": {
378 | "node": ">=12"
379 | },
380 | "optionalDependencies": {
381 | "@esbuild/android-arm": "0.17.15",
382 | "@esbuild/android-arm64": "0.17.15",
383 | "@esbuild/android-x64": "0.17.15",
384 | "@esbuild/darwin-arm64": "0.17.15",
385 | "@esbuild/darwin-x64": "0.17.15",
386 | "@esbuild/freebsd-arm64": "0.17.15",
387 | "@esbuild/freebsd-x64": "0.17.15",
388 | "@esbuild/linux-arm": "0.17.15",
389 | "@esbuild/linux-arm64": "0.17.15",
390 | "@esbuild/linux-ia32": "0.17.15",
391 | "@esbuild/linux-loong64": "0.17.15",
392 | "@esbuild/linux-mips64el": "0.17.15",
393 | "@esbuild/linux-ppc64": "0.17.15",
394 | "@esbuild/linux-riscv64": "0.17.15",
395 | "@esbuild/linux-s390x": "0.17.15",
396 | "@esbuild/linux-x64": "0.17.15",
397 | "@esbuild/netbsd-x64": "0.17.15",
398 | "@esbuild/openbsd-x64": "0.17.15",
399 | "@esbuild/sunos-x64": "0.17.15",
400 | "@esbuild/win32-arm64": "0.17.15",
401 | "@esbuild/win32-ia32": "0.17.15",
402 | "@esbuild/win32-x64": "0.17.15"
403 | }
404 | },
405 | "node_modules/typescript": {
406 | "version": "5.0.4",
407 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
408 | "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
409 | "dev": true,
410 | "bin": {
411 | "tsc": "bin/tsc",
412 | "tsserver": "bin/tsserver"
413 | },
414 | "engines": {
415 | "node": ">=12.20"
416 | }
417 | }
418 | },
419 | "dependencies": {
420 | "@esbuild/android-arm": {
421 | "version": "0.17.15",
422 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.15.tgz",
423 | "integrity": "sha512-sRSOVlLawAktpMvDyJIkdLI/c/kdRTOqo8t6ImVxg8yT7LQDUYV5Rp2FKeEosLr6ZCja9UjYAzyRSxGteSJPYg==",
424 | "dev": true,
425 | "optional": true
426 | },
427 | "@esbuild/android-arm64": {
428 | "version": "0.17.15",
429 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.15.tgz",
430 | "integrity": "sha512-0kOB6Y7Br3KDVgHeg8PRcvfLkq+AccreK///B4Z6fNZGr/tNHX0z2VywCc7PTeWp+bPvjA5WMvNXltHw5QjAIA==",
431 | "dev": true,
432 | "optional": true
433 | },
434 | "@esbuild/android-x64": {
435 | "version": "0.17.15",
436 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.15.tgz",
437 | "integrity": "sha512-MzDqnNajQZ63YkaUWVl9uuhcWyEyh69HGpMIrf+acR4otMkfLJ4sUCxqwbCyPGicE9dVlrysI3lMcDBjGiBBcQ==",
438 | "dev": true,
439 | "optional": true
440 | },
441 | "@esbuild/darwin-arm64": {
442 | "version": "0.17.15",
443 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.15.tgz",
444 | "integrity": "sha512-7siLjBc88Z4+6qkMDxPT2juf2e8SJxmsbNVKFY2ifWCDT72v5YJz9arlvBw5oB4W/e61H1+HDB/jnu8nNg0rLA==",
445 | "dev": true,
446 | "optional": true
447 | },
448 | "@esbuild/darwin-x64": {
449 | "version": "0.17.15",
450 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.15.tgz",
451 | "integrity": "sha512-NbImBas2rXwYI52BOKTW342Tm3LTeVlaOQ4QPZ7XuWNKiO226DisFk/RyPk3T0CKZkKMuU69yOvlapJEmax7cg==",
452 | "dev": true,
453 | "optional": true
454 | },
455 | "@esbuild/freebsd-arm64": {
456 | "version": "0.17.15",
457 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.15.tgz",
458 | "integrity": "sha512-Xk9xMDjBVG6CfgoqlVczHAdJnCs0/oeFOspFap5NkYAmRCT2qTn1vJWA2f419iMtsHSLm+O8B6SLV/HlY5cYKg==",
459 | "dev": true,
460 | "optional": true
461 | },
462 | "@esbuild/freebsd-x64": {
463 | "version": "0.17.15",
464 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.15.tgz",
465 | "integrity": "sha512-3TWAnnEOdclvb2pnfsTWtdwthPfOz7qAfcwDLcfZyGJwm1SRZIMOeB5FODVhnM93mFSPsHB9b/PmxNNbSnd0RQ==",
466 | "dev": true,
467 | "optional": true
468 | },
469 | "@esbuild/linux-arm": {
470 | "version": "0.17.15",
471 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.15.tgz",
472 | "integrity": "sha512-MLTgiXWEMAMr8nmS9Gigx43zPRmEfeBfGCwxFQEMgJ5MC53QKajaclW6XDPjwJvhbebv+RzK05TQjvH3/aM4Xw==",
473 | "dev": true,
474 | "optional": true
475 | },
476 | "@esbuild/linux-arm64": {
477 | "version": "0.17.15",
478 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.15.tgz",
479 | "integrity": "sha512-T0MVnYw9KT6b83/SqyznTs/3Jg2ODWrZfNccg11XjDehIved2oQfrX/wVuev9N936BpMRaTR9I1J0tdGgUgpJA==",
480 | "dev": true,
481 | "optional": true
482 | },
483 | "@esbuild/linux-ia32": {
484 | "version": "0.17.15",
485 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.15.tgz",
486 | "integrity": "sha512-wp02sHs015T23zsQtU4Cj57WiteiuASHlD7rXjKUyAGYzlOKDAjqK6bk5dMi2QEl/KVOcsjwL36kD+WW7vJt8Q==",
487 | "dev": true,
488 | "optional": true
489 | },
490 | "@esbuild/linux-loong64": {
491 | "version": "0.17.15",
492 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.15.tgz",
493 | "integrity": "sha512-k7FsUJjGGSxwnBmMh8d7IbObWu+sF/qbwc+xKZkBe/lTAF16RqxRCnNHA7QTd3oS2AfGBAnHlXL67shV5bBThQ==",
494 | "dev": true,
495 | "optional": true
496 | },
497 | "@esbuild/linux-mips64el": {
498 | "version": "0.17.15",
499 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.15.tgz",
500 | "integrity": "sha512-ZLWk6czDdog+Q9kE/Jfbilu24vEe/iW/Sj2d8EVsmiixQ1rM2RKH2n36qfxK4e8tVcaXkvuV3mU5zTZviE+NVQ==",
501 | "dev": true,
502 | "optional": true
503 | },
504 | "@esbuild/linux-ppc64": {
505 | "version": "0.17.15",
506 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.15.tgz",
507 | "integrity": "sha512-mY6dPkIRAiFHRsGfOYZC8Q9rmr8vOBZBme0/j15zFUKM99d4ILY4WpOC7i/LqoY+RE7KaMaSfvY8CqjJtuO4xg==",
508 | "dev": true,
509 | "optional": true
510 | },
511 | "@esbuild/linux-riscv64": {
512 | "version": "0.17.15",
513 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.15.tgz",
514 | "integrity": "sha512-EcyUtxffdDtWjjwIH8sKzpDRLcVtqANooMNASO59y+xmqqRYBBM7xVLQhqF7nksIbm2yHABptoioS9RAbVMWVA==",
515 | "dev": true,
516 | "optional": true
517 | },
518 | "@esbuild/linux-s390x": {
519 | "version": "0.17.15",
520 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.15.tgz",
521 | "integrity": "sha512-BuS6Jx/ezxFuHxgsfvz7T4g4YlVrmCmg7UAwboeyNNg0OzNzKsIZXpr3Sb/ZREDXWgt48RO4UQRDBxJN3B9Rbg==",
522 | "dev": true,
523 | "optional": true
524 | },
525 | "@esbuild/linux-x64": {
526 | "version": "0.17.15",
527 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.15.tgz",
528 | "integrity": "sha512-JsdS0EgEViwuKsw5tiJQo9UdQdUJYuB+Mf6HxtJSPN35vez1hlrNb1KajvKWF5Sa35j17+rW1ECEO9iNrIXbNg==",
529 | "dev": true,
530 | "optional": true
531 | },
532 | "@esbuild/netbsd-x64": {
533 | "version": "0.17.15",
534 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.15.tgz",
535 | "integrity": "sha512-R6fKjtUysYGym6uXf6qyNephVUQAGtf3n2RCsOST/neIwPqRWcnc3ogcielOd6pT+J0RDR1RGcy0ZY7d3uHVLA==",
536 | "dev": true,
537 | "optional": true
538 | },
539 | "@esbuild/openbsd-x64": {
540 | "version": "0.17.15",
541 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.15.tgz",
542 | "integrity": "sha512-mVD4PGc26b8PI60QaPUltYKeSX0wxuy0AltC+WCTFwvKCq2+OgLP4+fFd+hZXzO2xW1HPKcytZBdjqL6FQFa7w==",
543 | "dev": true,
544 | "optional": true
545 | },
546 | "@esbuild/sunos-x64": {
547 | "version": "0.17.15",
548 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.15.tgz",
549 | "integrity": "sha512-U6tYPovOkw3459t2CBwGcFYfFRjivcJJc1WC8Q3funIwX8x4fP+R6xL/QuTPNGOblbq/EUDxj9GU+dWKX0oWlQ==",
550 | "dev": true,
551 | "optional": true
552 | },
553 | "@esbuild/win32-arm64": {
554 | "version": "0.17.15",
555 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.15.tgz",
556 | "integrity": "sha512-W+Z5F++wgKAleDABemiyXVnzXgvRFs+GVKThSI+mGgleLWluv0D7Diz4oQpgdpNzh4i2nNDzQtWbjJiqutRp6Q==",
557 | "dev": true,
558 | "optional": true
559 | },
560 | "@esbuild/win32-ia32": {
561 | "version": "0.17.15",
562 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.15.tgz",
563 | "integrity": "sha512-Muz/+uGgheShKGqSVS1KsHtCyEzcdOn/W/Xbh6H91Etm+wiIfwZaBn1W58MeGtfI8WA961YMHFYTthBdQs4t+w==",
564 | "dev": true,
565 | "optional": true
566 | },
567 | "@esbuild/win32-x64": {
568 | "version": "0.17.15",
569 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.15.tgz",
570 | "integrity": "sha512-DjDa9ywLUUmjhV2Y9wUTIF+1XsmuFGvZoCmOWkli1XcNAh5t25cc7fgsCx4Zi/Uurep3TTLyDiKATgGEg61pkA==",
571 | "dev": true,
572 | "optional": true
573 | },
574 | "esbuild": {
575 | "version": "0.17.15",
576 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.15.tgz",
577 | "integrity": "sha512-LBUV2VsUIc/iD9ME75qhT4aJj0r75abCVS0jakhFzOtR7TQsqQA5w0tZ+KTKnwl3kXE0MhskNdHDh/I5aCR1Zw==",
578 | "dev": true,
579 | "requires": {
580 | "@esbuild/android-arm": "0.17.15",
581 | "@esbuild/android-arm64": "0.17.15",
582 | "@esbuild/android-x64": "0.17.15",
583 | "@esbuild/darwin-arm64": "0.17.15",
584 | "@esbuild/darwin-x64": "0.17.15",
585 | "@esbuild/freebsd-arm64": "0.17.15",
586 | "@esbuild/freebsd-x64": "0.17.15",
587 | "@esbuild/linux-arm": "0.17.15",
588 | "@esbuild/linux-arm64": "0.17.15",
589 | "@esbuild/linux-ia32": "0.17.15",
590 | "@esbuild/linux-loong64": "0.17.15",
591 | "@esbuild/linux-mips64el": "0.17.15",
592 | "@esbuild/linux-ppc64": "0.17.15",
593 | "@esbuild/linux-riscv64": "0.17.15",
594 | "@esbuild/linux-s390x": "0.17.15",
595 | "@esbuild/linux-x64": "0.17.15",
596 | "@esbuild/netbsd-x64": "0.17.15",
597 | "@esbuild/openbsd-x64": "0.17.15",
598 | "@esbuild/sunos-x64": "0.17.15",
599 | "@esbuild/win32-arm64": "0.17.15",
600 | "@esbuild/win32-ia32": "0.17.15",
601 | "@esbuild/win32-x64": "0.17.15"
602 | }
603 | },
604 | "typescript": {
605 | "version": "5.0.4",
606 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
607 | "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
608 | "dev": true
609 | }
610 | }
611 | }
612 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@toshusai/one",
3 | "version": "1.0.0-alpha.4",
4 | "description": "a js framework in an 1.7KB one class",
5 | "author": "toshusai",
6 | "license": "MIT",
7 | "main": "dist/cjs/index.js",
8 | "module": "dist/esm/index.js",
9 | "types": "dist/types/index.d.ts",
10 | "scripts": {
11 | "build:base": "esbuild index.ts --bundle --minify",
12 | "build:cjs": "npm run build:base -- --format=cjs --outdir=dist/cjs",
13 | "build:esm": "npm run build:base -- --format=esm --outdir=dist/esm",
14 | "tsc": "tsc --project tsconfig.json --declaration",
15 | "build": "npm run tsc --oudDir=dist/types && npm run build:cjs && npm run build:esm ",
16 | "prepublish": "npm run build"
17 | },
18 | "devDependencies": {
19 | "esbuild": "^0.17.15",
20 | "typescript": "^5.0.3"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": ["index.ts"],
3 | "compilerOptions": {
4 | "baseUrl": ".",
5 | "typeRoots": ["node_modules/@types"],
6 | "target": "ES6",
7 | "strict": true,
8 | "outDir": "./dist",
9 | "declaration": true,
10 | "declarationDir": "./dist/types",
11 | "emitDeclarationOnly": true
12 | }
13 | }
14 |
--------------------------------------------------------------------------------