boltstore 0.6.0 → 0.6.2
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 +132 -16
- package/dist/admin/oauth/user.d.ts.map +1 -1
- package/dist/admin/oauth/user.js +12 -3
- package/dist/admin/oauth/user.js.map +1 -1
- package/dist/auth/tables.d.ts.map +1 -1
- package/dist/auth/tables.js +10 -1
- package/dist/auth/tables.js.map +1 -1
- package/dist/auth/tokens.d.ts +0 -2
- package/dist/auth/tokens.d.ts.map +1 -1
- package/dist/auth/tokens.js +3 -6
- package/dist/auth/tokens.js.map +1 -1
- package/dist/auth/types.d.ts +3 -3
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/auth/users.d.ts +5 -0
- package/dist/auth/users.d.ts.map +1 -1
- package/dist/auth/users.js +28 -6
- package/dist/auth/users.js.map +1 -1
- package/dist/bin.d.ts +16 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +73 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli-style.d.ts +17 -0
- package/dist/cli-style.d.ts.map +1 -0
- package/dist/cli-style.js +38 -0
- package/dist/cli-style.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +153 -61
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +65 -43
- package/dist/config.js.map +1 -1
- package/dist/db/manager.d.ts.map +1 -1
- package/dist/db/manager.js +7 -0
- package/dist/db/manager.js.map +1 -1
- package/dist/entry.js +68 -66
- package/dist/entry.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +58 -36
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +15 -1
- package/dist/logger.js.map +1 -1
- package/dist/middleware/auth.d.ts +1 -29
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +22 -28
- package/dist/middleware/auth.js.map +1 -1
- package/dist/prompt.d.ts +17 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +95 -0
- package/dist/prompt.js.map +1 -0
- package/dist/routes/auth.d.ts.map +1 -1
- package/dist/routes/auth.js +5 -0
- package/dist/routes/auth.js.map +1 -1
- package/dist/yaml.d.ts +14 -0
- package/dist/yaml.d.ts.map +1 -0
- package/dist/yaml.js +91 -0
- package/dist/yaml.js.map +1 -0
- package/package.json +4 -2
package/dist/middleware/auth.js
CHANGED
|
@@ -1,21 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Authentication/authorization middleware for Boltstore.
|
|
3
|
-
*
|
|
4
|
-
* Extracts a Bearer JWT token or an API key secret from the incoming request,
|
|
5
|
-
* verifies it against the database, and returns an auth context. Admin-only
|
|
6
|
-
* routes must additionally ensure the principal has role "admin" (or a valid
|
|
7
|
-
* API key with admin-scoped permissions).
|
|
8
|
-
*
|
|
9
|
-
* @module boltstore/middleware/auth
|
|
10
|
-
*/
|
|
11
1
|
import { verifyAccessToken, } from "../auth";
|
|
12
2
|
import { verifyApiKey } from "../admin/api-keys";
|
|
13
|
-
/** Extract a Bearer token or API key secret from request headers. */
|
|
14
3
|
function extractCredentials(request) {
|
|
15
4
|
const auth = request.headers.get("Authorization");
|
|
16
5
|
if (auth?.startsWith("Bearer ")) {
|
|
17
6
|
const value = auth.slice(7).trim();
|
|
18
|
-
// API keys always start with "blt_"
|
|
19
7
|
if (value.startsWith("blt_")) {
|
|
20
8
|
return { apiKey: value };
|
|
21
9
|
}
|
|
@@ -26,11 +14,6 @@ function extractCredentials(request) {
|
|
|
26
14
|
return { apiKey: apiKey.trim() };
|
|
27
15
|
return {};
|
|
28
16
|
}
|
|
29
|
-
/**
|
|
30
|
-
* Authenticate the request against the given database.
|
|
31
|
-
*
|
|
32
|
-
* Returns an `AuthContext` on success or a 401/403 Response on failure.
|
|
33
|
-
*/
|
|
34
17
|
export async function authenticateRequest(request, manager, database, authConfig) {
|
|
35
18
|
const { token, apiKey } = extractCredentials(request);
|
|
36
19
|
if (!token && !apiKey) {
|
|
@@ -39,11 +22,13 @@ export async function authenticateRequest(request, manager, database, authConfig
|
|
|
39
22
|
const pool = database === "_system" ? manager.getMetaPool() : manager.get(database);
|
|
40
23
|
if (apiKey) {
|
|
41
24
|
try {
|
|
42
|
-
|
|
25
|
+
// Admin API keys are always stored in the system meta database
|
|
26
|
+
const ctx = await verifyApiKey(manager.getMetaPool(), apiKey);
|
|
43
27
|
return {
|
|
44
28
|
principalId: ctx.keyId,
|
|
45
29
|
apiKey: ctx,
|
|
46
30
|
isApiKey: true,
|
|
31
|
+
isAdmin: true,
|
|
47
32
|
};
|
|
48
33
|
}
|
|
49
34
|
catch (err) {
|
|
@@ -53,11 +38,24 @@ export async function authenticateRequest(request, manager, database, authConfig
|
|
|
53
38
|
}
|
|
54
39
|
try {
|
|
55
40
|
const ctx = verifyAccessToken(pool, token, authConfig);
|
|
41
|
+
// Check if this user exists in the system database — system users are admins
|
|
42
|
+
let isAdmin = false;
|
|
43
|
+
try {
|
|
44
|
+
const metaDb = manager.getMetaPool().read();
|
|
45
|
+
const sysUser = metaDb
|
|
46
|
+
.query("SELECT 1 FROM _users WHERE id=?")
|
|
47
|
+
.get(ctx.userId);
|
|
48
|
+
if (sysUser)
|
|
49
|
+
isAdmin = true;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Meta pool might not be available — not admin
|
|
53
|
+
}
|
|
56
54
|
return {
|
|
57
55
|
principalId: ctx.userId,
|
|
58
56
|
email: ctx.email,
|
|
59
|
-
role: ctx.role,
|
|
60
57
|
isApiKey: false,
|
|
58
|
+
isAdmin,
|
|
61
59
|
};
|
|
62
60
|
}
|
|
63
61
|
catch (err) {
|
|
@@ -65,13 +63,8 @@ export async function authenticateRequest(request, manager, database, authConfig
|
|
|
65
63
|
return new Response(JSON.stringify({ error: { code: "UNAUTHORIZED", message } }), { status: 401, headers: { "Content-Type": "application/json" } });
|
|
66
64
|
}
|
|
67
65
|
}
|
|
68
|
-
/**
|
|
69
|
-
* Require an authenticated admin principal.
|
|
70
|
-
*
|
|
71
|
-
* JWT users must have role "admin". API keys are not allowed for admin
|
|
72
|
-
* routes unless the key explicitly includes the "admin" operation.
|
|
73
|
-
*/
|
|
74
66
|
export function requireAdmin(auth) {
|
|
67
|
+
// API keys with admin scope
|
|
75
68
|
if (auth.isApiKey) {
|
|
76
69
|
const ops = auth.apiKey?.permissions.operations ?? [];
|
|
77
70
|
if (!ops.includes("admin")) {
|
|
@@ -79,9 +72,10 @@ export function requireAdmin(auth) {
|
|
|
79
72
|
}
|
|
80
73
|
return null;
|
|
81
74
|
}
|
|
82
|
-
|
|
83
|
-
|
|
75
|
+
// JWT users that exist in the system database are admins
|
|
76
|
+
if (auth.isAdmin) {
|
|
77
|
+
return null;
|
|
84
78
|
}
|
|
85
|
-
return
|
|
79
|
+
return new Response(JSON.stringify({ error: { code: "FORBIDDEN", message: "Admin access required." } }), { status: 403, headers: { "Content-Type": "application/json" } });
|
|
86
80
|
}
|
|
87
81
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/prompt.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal terminal prompt utility for CLI commands.
|
|
3
|
+
* Uses process.stdin/stdout — no third-party dependencies.
|
|
4
|
+
*
|
|
5
|
+
* @module boltstore/prompt
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Ask the user a question and return their response.
|
|
9
|
+
* Works in TTY mode and with piped stdin.
|
|
10
|
+
*/
|
|
11
|
+
export declare function prompt(question: string): Promise<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Ask for a password. Input is hidden (no echo).
|
|
14
|
+
* Requires a TTY terminal.
|
|
15
|
+
*/
|
|
16
|
+
export declare function promptPassword(question: string): Promise<string>;
|
|
17
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB9D;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkEtE"}
|
package/dist/prompt.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal terminal prompt utility for CLI commands.
|
|
3
|
+
* Uses process.stdin/stdout — no third-party dependencies.
|
|
4
|
+
*
|
|
5
|
+
* @module boltstore/prompt
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Ask the user a question and return their response.
|
|
9
|
+
* Works in TTY mode and with piped stdin.
|
|
10
|
+
*/
|
|
11
|
+
export async function prompt(question) {
|
|
12
|
+
process.stdout.write(question);
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
const stdin = process.stdin;
|
|
15
|
+
let buffer = "";
|
|
16
|
+
function onData(chunk) {
|
|
17
|
+
buffer += chunk.toString();
|
|
18
|
+
if (buffer.includes("\n")) {
|
|
19
|
+
stdin.removeListener("data", onData);
|
|
20
|
+
stdin.pause();
|
|
21
|
+
resolve(buffer.replace(/\r?\n$/, "").trim());
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
stdin.resume();
|
|
25
|
+
stdin.on("data", onData);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Ask for a password. Input is hidden (no echo).
|
|
30
|
+
* Requires a TTY terminal.
|
|
31
|
+
*/
|
|
32
|
+
export async function promptPassword(question) {
|
|
33
|
+
const stdin = process.stdin;
|
|
34
|
+
const wasRaw = stdin.isRaw || false;
|
|
35
|
+
// If not a TTY, fall back to visible prompt
|
|
36
|
+
if (!stdin.isTTY) {
|
|
37
|
+
return prompt(question);
|
|
38
|
+
}
|
|
39
|
+
process.stdout.write(question);
|
|
40
|
+
return new Promise((resolve) => {
|
|
41
|
+
let buffer = "";
|
|
42
|
+
try {
|
|
43
|
+
stdin.setRawMode(true);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Raw mode not supported — fall back to visible
|
|
47
|
+
stdin.setRawMode(false);
|
|
48
|
+
return prompt(question).then(resolve);
|
|
49
|
+
}
|
|
50
|
+
stdin.resume();
|
|
51
|
+
function onData(chunk) {
|
|
52
|
+
for (const byte of chunk) {
|
|
53
|
+
const char = String.fromCharCode(byte);
|
|
54
|
+
// Enter / Return
|
|
55
|
+
if (char === "\r" || char === "\n") {
|
|
56
|
+
process.stdout.write("\n");
|
|
57
|
+
stdin.removeListener("data", onData);
|
|
58
|
+
try {
|
|
59
|
+
stdin.setRawMode(wasRaw);
|
|
60
|
+
}
|
|
61
|
+
catch { }
|
|
62
|
+
stdin.pause();
|
|
63
|
+
resolve(buffer.trim());
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// Backspace / Delete
|
|
67
|
+
if (char === "\x7f" || char === "\b") {
|
|
68
|
+
if (buffer.length > 0) {
|
|
69
|
+
buffer = buffer.slice(0, -1);
|
|
70
|
+
process.stdout.write("\b \b");
|
|
71
|
+
}
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
// Ctrl+C
|
|
75
|
+
if (char === "\x03") {
|
|
76
|
+
process.stdout.write("\n");
|
|
77
|
+
stdin.removeListener("data", onData);
|
|
78
|
+
try {
|
|
79
|
+
stdin.setRawMode(wasRaw);
|
|
80
|
+
}
|
|
81
|
+
catch { }
|
|
82
|
+
stdin.pause();
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
// Printable characters
|
|
86
|
+
if (byte >= 32 && byte <= 126) {
|
|
87
|
+
buffer += char;
|
|
88
|
+
process.stdout.write("*");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
stdin.on("data", onData);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAuF,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAI/H,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,UAAU,GACjB,IAAI,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAuF,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAI/H,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,UAAU,GACjB,IAAI,CAwGN"}
|
package/dist/routes/auth.js
CHANGED
|
@@ -20,7 +20,12 @@ export function registerAuthRoutes(router, manager, config) {
|
|
|
20
20
|
}));
|
|
21
21
|
};
|
|
22
22
|
// POST /api/:database/auth/register — register a new user
|
|
23
|
+
// Registration on the _system database is not allowed via API.
|
|
24
|
+
// Admin accounts can only be created via the CLI (boltstore admin init).
|
|
23
25
|
router.post("/api/:database/auth/register", async (req, params) => {
|
|
26
|
+
if (params.database === "_system") {
|
|
27
|
+
return errorResponse("FORBIDDEN", "Cannot register on the system database. Use the CLI to create an admin account: boltstore admin init", 403);
|
|
28
|
+
}
|
|
24
29
|
try {
|
|
25
30
|
const { email, password } = await req.json();
|
|
26
31
|
if (!email || typeof email !== "string")
|
package/dist/routes/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/yaml.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal YAML parser for Boltstore config files.
|
|
3
|
+
*
|
|
4
|
+
* Supports only the flat key-value structures used in boltstore.yaml.
|
|
5
|
+
* No anchors, aliases, multi-line strings, or deep nesting.
|
|
6
|
+
*
|
|
7
|
+
* @module boltstore/yaml
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Parse a simple YAML string into a plain object.
|
|
11
|
+
* Supports: comments, key: value pairs, arrays (indented `-` items).
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseYaml(raw: string): Record<string, unknown>;
|
|
14
|
+
//# sourceMappingURL=yaml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../src/yaml.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0D9D"}
|
package/dist/yaml.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal YAML parser for Boltstore config files.
|
|
3
|
+
*
|
|
4
|
+
* Supports only the flat key-value structures used in boltstore.yaml.
|
|
5
|
+
* No anchors, aliases, multi-line strings, or deep nesting.
|
|
6
|
+
*
|
|
7
|
+
* @module boltstore/yaml
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Parse a simple YAML string into a plain object.
|
|
11
|
+
* Supports: comments, key: value pairs, arrays (indented `-` items).
|
|
12
|
+
*/
|
|
13
|
+
export function parseYaml(raw) {
|
|
14
|
+
const result = {};
|
|
15
|
+
const lines = raw.split("\n");
|
|
16
|
+
let currentKey = null;
|
|
17
|
+
let currentArray = [];
|
|
18
|
+
function flushArray() {
|
|
19
|
+
if (currentKey && currentArray.length > 0) {
|
|
20
|
+
result[currentKey] = currentArray;
|
|
21
|
+
}
|
|
22
|
+
currentKey = null;
|
|
23
|
+
currentArray = [];
|
|
24
|
+
}
|
|
25
|
+
for (const line of lines) {
|
|
26
|
+
// Skip blank lines and comments
|
|
27
|
+
if (!line.trim() || line.trim().startsWith("#"))
|
|
28
|
+
continue;
|
|
29
|
+
// Array item (indented with - )
|
|
30
|
+
const arrayMatch = line.match(/^\s+-\s+(.+)$/);
|
|
31
|
+
if (arrayMatch && currentKey) {
|
|
32
|
+
currentArray.push(coerceValue(arrayMatch[1].trim()));
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
// Not an array item — flush any pending array
|
|
36
|
+
if (currentKey && currentArray.length > 0) {
|
|
37
|
+
flushArray();
|
|
38
|
+
}
|
|
39
|
+
// Key: value pair
|
|
40
|
+
const kvMatch = line.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*:\s*(.*)$/);
|
|
41
|
+
if (kvMatch) {
|
|
42
|
+
flushArray();
|
|
43
|
+
const key = kvMatch[1];
|
|
44
|
+
const rawValue = kvMatch[2].trim();
|
|
45
|
+
// Check if next line might start an array (empty value + indented list follows)
|
|
46
|
+
if (rawValue === "" || rawValue === "null" || rawValue === "~") {
|
|
47
|
+
// Could be an array start — set currentKey to collect items
|
|
48
|
+
if (rawValue === "" || rawValue === "null") {
|
|
49
|
+
result[key] = rawValue === "null" ? null : "";
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
result[key] = null;
|
|
53
|
+
}
|
|
54
|
+
// Don't set currentKey for empty strings — wait for indented items
|
|
55
|
+
currentKey = key;
|
|
56
|
+
currentArray = [];
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
result[key] = coerceValue(rawValue);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Flush any remaining array at EOF
|
|
64
|
+
flushArray();
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
/** Coerce a YAML scalar value to the appropriate JS type. */
|
|
68
|
+
function coerceValue(val) {
|
|
69
|
+
// Unquoted null/none
|
|
70
|
+
if (val === "null" || val === "~" || val === "none")
|
|
71
|
+
return null;
|
|
72
|
+
// Unquoted booleans
|
|
73
|
+
if (val === "true" || val === "TRUE" || val === "True")
|
|
74
|
+
return true;
|
|
75
|
+
if (val === "false" || val === "FALSE" || val === "False")
|
|
76
|
+
return false;
|
|
77
|
+
// Remove surrounding quotes (single or double)
|
|
78
|
+
if ((val.startsWith('"') && val.endsWith('"')) ||
|
|
79
|
+
(val.startsWith("'") && val.endsWith("'"))) {
|
|
80
|
+
return val.slice(1, -1);
|
|
81
|
+
}
|
|
82
|
+
// Integer
|
|
83
|
+
if (/^-?\d+$/.test(val))
|
|
84
|
+
return parseInt(val, 10);
|
|
85
|
+
// Float
|
|
86
|
+
if (/^-?\d+\.\d+$/.test(val))
|
|
87
|
+
return parseFloat(val);
|
|
88
|
+
// String
|
|
89
|
+
return val;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=yaml.js.map
|
package/dist/yaml.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml.js","sourceRoot":"","sources":["../src/yaml.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "boltstore",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Boltstore server — lightweight backend with realtime sync",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"bin": {
|
|
9
|
-
"boltstore": "./dist/
|
|
9
|
+
"boltstore": "./dist/bin.js"
|
|
10
10
|
},
|
|
11
11
|
"files": ["dist"],
|
|
12
12
|
"scripts": {
|
|
13
|
+
"bolt": "bun src/bin.ts",
|
|
14
|
+
"boltstore": "bun src/bin.ts",
|
|
13
15
|
"build": "tsc",
|
|
14
16
|
"dev": "tsc --watch",
|
|
15
17
|
"start": "bun run dist/index.js",
|