@xrift/sdk 0.1.0 → 0.1.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/dist/cjs/config.cjs +114 -0
- package/dist/cjs/config.cjs.map +1 -0
- package/dist/cjs/config.d.cts +42 -0
- package/dist/cjs/config.d.cts.map +1 -0
- package/dist/cjs/index.cjs +7 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +2 -0
- package/dist/cjs/index.d.cts.map +1 -1
- package/dist/cjs/node/index.cjs +7 -0
- package/dist/cjs/node/index.cjs.map +1 -0
- package/dist/cjs/node/index.d.cts +3 -0
- package/dist/cjs/node/index.d.cts.map +1 -0
- package/dist/cjs/node/upload.cjs +102 -0
- package/dist/cjs/node/upload.cjs.map +1 -0
- package/dist/cjs/node/upload.d.cts +18 -0
- package/dist/cjs/node/upload.d.cts.map +1 -0
- package/dist/esm/config.d.ts +42 -0
- package/dist/esm/config.d.ts.map +1 -0
- package/dist/esm/config.js +108 -0
- package/dist/esm/config.js.map +1 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node/index.d.ts +3 -0
- package/dist/esm/node/index.d.ts.map +1 -0
- package/dist/esm/node/index.js +2 -0
- package/dist/esm/node/index.js.map +1 -0
- package/dist/esm/node/upload.d.ts +18 -0
- package/dist/esm/node/upload.d.ts.map +1 -0
- package/dist/esm/node/upload.js +98 -0
- package/dist/esm/node/upload.js.map +1 -0
- package/package.json +11 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_IGNORE_PATTERNS = void 0;
|
|
4
|
+
exports.parseWorldConfig = parseWorldConfig;
|
|
5
|
+
exports.parseItemConfig = parseItemConfig;
|
|
6
|
+
exports.filterFiles = filterFiles;
|
|
7
|
+
const errors_js_1 = require("./errors.js");
|
|
8
|
+
// --- Constants ---
|
|
9
|
+
exports.DEFAULT_IGNORE_PATTERNS = ['__federation_shared_*.js'];
|
|
10
|
+
// --- Functions ---
|
|
11
|
+
function parseJson(json) {
|
|
12
|
+
let raw;
|
|
13
|
+
try {
|
|
14
|
+
raw = JSON.parse(json);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
throw new errors_js_1.XriftSdkError('Invalid JSON in xrift.json');
|
|
18
|
+
}
|
|
19
|
+
if (typeof raw !== 'object' || raw === null) {
|
|
20
|
+
throw new errors_js_1.XriftSdkError('xrift.json must be a JSON object');
|
|
21
|
+
}
|
|
22
|
+
return raw;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* xrift.json の JSON 文字列をパースしてワールド設定を返す。
|
|
26
|
+
* "world" キーが存在しない場合はエラーをスローする。
|
|
27
|
+
*/
|
|
28
|
+
function parseWorldConfig(json) {
|
|
29
|
+
const root = parseJson(json);
|
|
30
|
+
if (!root.world) {
|
|
31
|
+
throw new errors_js_1.XriftSdkError('xrift.json does not contain a "world" key');
|
|
32
|
+
}
|
|
33
|
+
const raw = root.world;
|
|
34
|
+
if (typeof raw !== 'object' || raw === null) {
|
|
35
|
+
throw new errors_js_1.XriftSdkError('"world" must be an object');
|
|
36
|
+
}
|
|
37
|
+
const obj = raw;
|
|
38
|
+
if (typeof obj.distDir !== 'string' || !obj.distDir) {
|
|
39
|
+
throw new errors_js_1.XriftSdkError('"world.distDir" is required');
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
type: 'world',
|
|
43
|
+
distDir: normalizePath(obj.distDir),
|
|
44
|
+
name: typeof obj.title === 'string' && obj.title ? obj.title : 'Untitled',
|
|
45
|
+
description: typeof obj.description === 'string' ? obj.description : undefined,
|
|
46
|
+
thumbnailPath: typeof obj.thumbnailPath === 'string' ? obj.thumbnailPath : undefined,
|
|
47
|
+
ignore: mergeIgnorePatterns(obj.ignore),
|
|
48
|
+
physics: obj.physics,
|
|
49
|
+
camera: obj.camera,
|
|
50
|
+
permissions: obj.permissions,
|
|
51
|
+
outputBufferType: obj.outputBufferType,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* xrift.json の JSON 文字列をパースしてアイテム設定を返す。
|
|
56
|
+
* "item" キーが存在しない場合はエラーをスローする。
|
|
57
|
+
*/
|
|
58
|
+
function parseItemConfig(json) {
|
|
59
|
+
const root = parseJson(json);
|
|
60
|
+
if (!root.item) {
|
|
61
|
+
throw new errors_js_1.XriftSdkError('xrift.json does not contain an "item" key');
|
|
62
|
+
}
|
|
63
|
+
const raw = root.item;
|
|
64
|
+
if (typeof raw !== 'object' || raw === null) {
|
|
65
|
+
throw new errors_js_1.XriftSdkError('"item" must be an object');
|
|
66
|
+
}
|
|
67
|
+
const obj = raw;
|
|
68
|
+
if (typeof obj.distDir !== 'string' || !obj.distDir) {
|
|
69
|
+
throw new errors_js_1.XriftSdkError('"item.distDir" is required');
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
type: 'item',
|
|
73
|
+
distDir: normalizePath(obj.distDir),
|
|
74
|
+
name: typeof obj.title === 'string' && obj.title ? obj.title : 'Untitled',
|
|
75
|
+
description: typeof obj.description === 'string' ? obj.description : undefined,
|
|
76
|
+
thumbnailPath: typeof obj.thumbnailPath === 'string' ? obj.thumbnailPath : undefined,
|
|
77
|
+
ignore: mergeIgnorePatterns(obj.ignore),
|
|
78
|
+
permissions: obj.permissions,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function mergeIgnorePatterns(raw) {
|
|
82
|
+
const userPatterns = Array.isArray(raw) ? raw.filter((p) => typeof p === 'string') : [];
|
|
83
|
+
const merged = [...exports.DEFAULT_IGNORE_PATTERNS];
|
|
84
|
+
for (const p of userPatterns) {
|
|
85
|
+
if (!merged.includes(p)) {
|
|
86
|
+
merged.push(p);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return merged;
|
|
90
|
+
}
|
|
91
|
+
/** "./dist" → "dist", "dist/" → "dist", "." → "" */
|
|
92
|
+
function normalizePath(p) {
|
|
93
|
+
return p
|
|
94
|
+
.replace(/^\.\//, '')
|
|
95
|
+
.replace(/\/+$/, '')
|
|
96
|
+
.replace(/^\.?$/, '');
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* ignore パターンでファイルパスをフィルタリングする。
|
|
100
|
+
* マッチしたファイルを除外し、残ったファイルパスを返す。
|
|
101
|
+
*/
|
|
102
|
+
function filterFiles(filePaths, ignorePatterns) {
|
|
103
|
+
return filePaths.filter((filePath) => !matchesIgnorePattern(filePath, ignorePatterns));
|
|
104
|
+
}
|
|
105
|
+
function matchesIgnorePattern(filePath, patterns) {
|
|
106
|
+
return patterns.some((pattern) => {
|
|
107
|
+
const regex = new RegExp('^' +
|
|
108
|
+
pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '.*') +
|
|
109
|
+
'$');
|
|
110
|
+
const fileName = filePath.split('/').pop() ?? filePath;
|
|
111
|
+
return regex.test(filePath) || regex.test(fileName);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { PhysicsConfig, CameraConfig, OutputBufferType } from './types/common.js';
|
|
2
|
+
import type { WorldPermissions } from './types/worlds.js';
|
|
3
|
+
import type { ItemPermissions } from './types/items.js';
|
|
4
|
+
export interface XriftWorldConfig {
|
|
5
|
+
type: 'world';
|
|
6
|
+
distDir: string;
|
|
7
|
+
name: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
thumbnailPath?: string;
|
|
10
|
+
ignore: string[];
|
|
11
|
+
physics?: PhysicsConfig;
|
|
12
|
+
camera?: CameraConfig;
|
|
13
|
+
permissions?: WorldPermissions;
|
|
14
|
+
outputBufferType?: OutputBufferType;
|
|
15
|
+
}
|
|
16
|
+
export interface XriftItemConfig {
|
|
17
|
+
type: 'item';
|
|
18
|
+
distDir: string;
|
|
19
|
+
name: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
thumbnailPath?: string;
|
|
22
|
+
ignore: string[];
|
|
23
|
+
permissions?: ItemPermissions;
|
|
24
|
+
}
|
|
25
|
+
export type XriftConfig = XriftWorldConfig | XriftItemConfig;
|
|
26
|
+
export declare const DEFAULT_IGNORE_PATTERNS: string[];
|
|
27
|
+
/**
|
|
28
|
+
* xrift.json の JSON 文字列をパースしてワールド設定を返す。
|
|
29
|
+
* "world" キーが存在しない場合はエラーをスローする。
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseWorldConfig(json: string): XriftWorldConfig;
|
|
32
|
+
/**
|
|
33
|
+
* xrift.json の JSON 文字列をパースしてアイテム設定を返す。
|
|
34
|
+
* "item" キーが存在しない場合はエラーをスローする。
|
|
35
|
+
*/
|
|
36
|
+
export declare function parseItemConfig(json: string): XriftItemConfig;
|
|
37
|
+
/**
|
|
38
|
+
* ignore パターンでファイルパスをフィルタリングする。
|
|
39
|
+
* マッチしたファイルを除外し、残ったファイルパスを返す。
|
|
40
|
+
*/
|
|
41
|
+
export declare function filterFiles(filePaths: string[], ignorePatterns: string[]): string[];
|
|
42
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKxD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAI7D,eAAO,MAAM,uBAAuB,UAA+B,CAAC;AAmBpE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAkC/D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CA+B7D;AAsBD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EAAE,EACnB,cAAc,EAAE,MAAM,EAAE,GACvB,MAAM,EAAE,CAIV"}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.XriftNetworkError = exports.XriftAuthError = exports.XriftApiError = exports.XriftSdkError = exports.getMimeType = exports.calculateContentHash = exports.XriftClient = void 0;
|
|
3
|
+
exports.XriftNetworkError = exports.XriftAuthError = exports.XriftApiError = exports.XriftSdkError = exports.getMimeType = exports.calculateContentHash = exports.DEFAULT_IGNORE_PATTERNS = exports.filterFiles = exports.parseItemConfig = exports.parseWorldConfig = exports.XriftClient = void 0;
|
|
4
4
|
// Client
|
|
5
5
|
var client_js_1 = require("./client.js");
|
|
6
6
|
Object.defineProperty(exports, "XriftClient", { enumerable: true, get: function () { return client_js_1.XriftClient; } });
|
|
7
|
+
// Config
|
|
8
|
+
var config_js_1 = require("./config.js");
|
|
9
|
+
Object.defineProperty(exports, "parseWorldConfig", { enumerable: true, get: function () { return config_js_1.parseWorldConfig; } });
|
|
10
|
+
Object.defineProperty(exports, "parseItemConfig", { enumerable: true, get: function () { return config_js_1.parseItemConfig; } });
|
|
11
|
+
Object.defineProperty(exports, "filterFiles", { enumerable: true, get: function () { return config_js_1.filterFiles; } });
|
|
12
|
+
Object.defineProperty(exports, "DEFAULT_IGNORE_PATTERNS", { enumerable: true, get: function () { return config_js_1.DEFAULT_IGNORE_PATTERNS; } });
|
|
7
13
|
// Hash
|
|
8
14
|
var hash_js_1 = require("./hash.js");
|
|
9
15
|
Object.defineProperty(exports, "calculateContentHash", { enumerable: true, get: function () { return hash_js_1.calculateContentHash; } });
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,SAAS;AACT,yCAA0C;AAAjC,wGAAA,WAAW,OAAA;AAGpB,OAAO;AACP,qCAAiD;AAAxC,+GAAA,oBAAoB,OAAA;AAE7B,OAAO;AACP,2CAA8C;AAArC,sGAAA,WAAW,OAAA;AAEpB,SAAS;AACT,yCAKqB;AAJnB,0GAAA,aAAa,OAAA;AACb,0GAAA,aAAa,OAAA;AACb,2GAAA,cAAc,OAAA;AACd,8GAAA,iBAAiB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,SAAS;AACT,yCAA0C;AAAjC,wGAAA,WAAW,OAAA;AAGpB,SAAS;AACT,yCAKqB;AAJnB,6GAAA,gBAAgB,OAAA;AAChB,4GAAA,eAAe,OAAA;AACf,wGAAA,WAAW,OAAA;AACX,oHAAA,uBAAuB,OAAA;AAQzB,OAAO;AACP,qCAAiD;AAAxC,+GAAA,oBAAoB,OAAA;AAE7B,OAAO;AACP,2CAA8C;AAArC,sGAAA,WAAW,OAAA;AAEpB,SAAS;AACT,yCAKqB;AAJnB,0GAAA,aAAa,OAAA;AACb,0GAAA,aAAa,OAAA;AACb,2GAAA,cAAc,OAAA;AACd,8GAAA,iBAAiB,OAAA"}
|
package/dist/cjs/index.d.cts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { XriftClient } from './client.js';
|
|
2
2
|
export type { XriftClientConfig } from './client.js';
|
|
3
|
+
export { parseWorldConfig, parseItemConfig, filterFiles, DEFAULT_IGNORE_PATTERNS, } from './config.js';
|
|
4
|
+
export type { XriftConfig, XriftWorldConfig, XriftItemConfig, } from './config.js';
|
|
3
5
|
export { calculateContentHash } from './hash.js';
|
|
4
6
|
export { getMimeType } from './utils/mime.js';
|
|
5
7
|
export { XriftSdkError, XriftApiError, XriftAuthError, XriftNetworkError, } from './errors.js';
|
package/dist/cjs/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGjD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGjD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.uploadItemFromDirectory = exports.uploadWorldFromDirectory = void 0;
|
|
4
|
+
var upload_js_1 = require("./upload.js");
|
|
5
|
+
Object.defineProperty(exports, "uploadWorldFromDirectory", { enumerable: true, get: function () { return upload_js_1.uploadWorldFromDirectory; } });
|
|
6
|
+
Object.defineProperty(exports, "uploadItemFromDirectory", { enumerable: true, get: function () { return upload_js_1.uploadItemFromDirectory; } });
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":";;;AAAA,yCAGqB;AAFnB,qHAAA,wBAAwB,OAAA;AACxB,oHAAA,uBAAuB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,8BAA8B,EAC9B,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.uploadWorldFromDirectory = uploadWorldFromDirectory;
|
|
4
|
+
exports.uploadItemFromDirectory = uploadItemFromDirectory;
|
|
5
|
+
const promises_1 = require("node:fs/promises");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const client_js_1 = require("../client.js");
|
|
8
|
+
const config_js_1 = require("../config.js");
|
|
9
|
+
const errors_js_1 = require("../errors.js");
|
|
10
|
+
const mime_js_1 = require("../utils/mime.js");
|
|
11
|
+
// --- Helpers ---
|
|
12
|
+
async function listFilesRecursively(dir) {
|
|
13
|
+
const results = [];
|
|
14
|
+
const entries = await (0, promises_1.readdir)(dir, { withFileTypes: true });
|
|
15
|
+
for (const entry of entries) {
|
|
16
|
+
const fullPath = (0, node_path_1.join)(dir, entry.name);
|
|
17
|
+
if (entry.isDirectory()) {
|
|
18
|
+
results.push(...(await listFilesRecursively(fullPath)));
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
results.push(fullPath);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return results;
|
|
25
|
+
}
|
|
26
|
+
async function buildUploadFiles(dirPath, distDir, ignorePatterns) {
|
|
27
|
+
const distPath = distDir ? (0, node_path_1.join)(dirPath, distDir) : dirPath;
|
|
28
|
+
let distStat;
|
|
29
|
+
try {
|
|
30
|
+
distStat = await (0, promises_1.stat)(distPath);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
throw new errors_js_1.XriftSdkError(`distDir not found: ${distPath}`);
|
|
34
|
+
}
|
|
35
|
+
if (!distStat.isDirectory()) {
|
|
36
|
+
throw new errors_js_1.XriftSdkError(`distDir is not a directory: ${distPath}`);
|
|
37
|
+
}
|
|
38
|
+
const absolutePaths = await listFilesRecursively(distPath);
|
|
39
|
+
const relativePaths = absolutePaths.map((p) => (0, node_path_1.relative)(distPath, p));
|
|
40
|
+
const filtered = (0, config_js_1.filterFiles)(relativePaths, ignorePatterns);
|
|
41
|
+
const uploadFiles = await Promise.all(filtered.map(async (remotePath) => {
|
|
42
|
+
const fullPath = (0, node_path_1.join)(distPath, remotePath);
|
|
43
|
+
const data = await (0, promises_1.readFile)(fullPath);
|
|
44
|
+
return {
|
|
45
|
+
remotePath,
|
|
46
|
+
size: data.byteLength,
|
|
47
|
+
contentType: (0, mime_js_1.getMimeType)(remotePath),
|
|
48
|
+
data: data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength),
|
|
49
|
+
};
|
|
50
|
+
}));
|
|
51
|
+
return uploadFiles;
|
|
52
|
+
}
|
|
53
|
+
async function readConfigJson(dirPath) {
|
|
54
|
+
const configPath = (0, node_path_1.join)(dirPath, 'xrift.json');
|
|
55
|
+
try {
|
|
56
|
+
return await (0, promises_1.readFile)(configPath, 'utf-8');
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
throw new errors_js_1.XriftSdkError(`xrift.json not found: ${configPath}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// --- Public API ---
|
|
63
|
+
async function uploadWorldFromDirectory(dirPath, options) {
|
|
64
|
+
const raw = await readConfigJson(dirPath);
|
|
65
|
+
const wc = (0, config_js_1.parseWorldConfig)(raw);
|
|
66
|
+
const uploadFiles = await buildUploadFiles(dirPath, wc.distDir, wc.ignore);
|
|
67
|
+
const client = new client_js_1.XriftClient({
|
|
68
|
+
token: options.token,
|
|
69
|
+
baseUrl: options.baseUrl,
|
|
70
|
+
timeout: options.timeout,
|
|
71
|
+
});
|
|
72
|
+
return client.worlds.upload(uploadFiles, {
|
|
73
|
+
worldId: options.worldId,
|
|
74
|
+
name: wc.name,
|
|
75
|
+
description: wc.description,
|
|
76
|
+
thumbnailPath: wc.thumbnailPath,
|
|
77
|
+
physics: wc.physics,
|
|
78
|
+
camera: wc.camera,
|
|
79
|
+
permissions: wc.permissions,
|
|
80
|
+
outputBufferType: wc.outputBufferType,
|
|
81
|
+
onProgress: options.onProgress,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
async function uploadItemFromDirectory(dirPath, options) {
|
|
85
|
+
const raw = await readConfigJson(dirPath);
|
|
86
|
+
const ic = (0, config_js_1.parseItemConfig)(raw);
|
|
87
|
+
const uploadFiles = await buildUploadFiles(dirPath, ic.distDir, ic.ignore);
|
|
88
|
+
const client = new client_js_1.XriftClient({
|
|
89
|
+
token: options.token,
|
|
90
|
+
baseUrl: options.baseUrl,
|
|
91
|
+
timeout: options.timeout,
|
|
92
|
+
});
|
|
93
|
+
return client.items.upload(uploadFiles, {
|
|
94
|
+
itemId: options.itemId,
|
|
95
|
+
name: ic.name,
|
|
96
|
+
description: ic.description,
|
|
97
|
+
thumbnailPath: ic.thumbnailPath,
|
|
98
|
+
permissions: ic.permissions,
|
|
99
|
+
onProgress: options.onProgress,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/node/upload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { UploadProgress } from '../types/common.js';
|
|
2
|
+
import type { WorldUploadResult } from '../types/worlds.js';
|
|
3
|
+
import type { ItemUploadResult } from '../types/items.js';
|
|
4
|
+
export interface UploadFromDirectoryBaseOptions {
|
|
5
|
+
token: string;
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
timeout?: number;
|
|
8
|
+
onProgress?: (progress: UploadProgress) => void;
|
|
9
|
+
}
|
|
10
|
+
export interface WorldUploadFromDirectoryOptions extends UploadFromDirectoryBaseOptions {
|
|
11
|
+
worldId?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ItemUploadFromDirectoryOptions extends UploadFromDirectoryBaseOptions {
|
|
14
|
+
itemId?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function uploadWorldFromDirectory(dirPath: string, options: WorldUploadFromDirectoryOptions): Promise<WorldUploadResult>;
|
|
17
|
+
export declare function uploadItemFromDirectory(dirPath: string, options: ItemUploadFromDirectoryOptions): Promise<ItemUploadResult>;
|
|
18
|
+
//# sourceMappingURL=upload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/node/upload.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAI1D,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,+BACf,SAAQ,8BAA8B;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,8BACf,SAAQ,8BAA8B;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,iBAAiB,CAAC,CA2B5B;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,gBAAgB,CAAC,CAwB3B"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { PhysicsConfig, CameraConfig, OutputBufferType } from './types/common.js';
|
|
2
|
+
import type { WorldPermissions } from './types/worlds.js';
|
|
3
|
+
import type { ItemPermissions } from './types/items.js';
|
|
4
|
+
export interface XriftWorldConfig {
|
|
5
|
+
type: 'world';
|
|
6
|
+
distDir: string;
|
|
7
|
+
name: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
thumbnailPath?: string;
|
|
10
|
+
ignore: string[];
|
|
11
|
+
physics?: PhysicsConfig;
|
|
12
|
+
camera?: CameraConfig;
|
|
13
|
+
permissions?: WorldPermissions;
|
|
14
|
+
outputBufferType?: OutputBufferType;
|
|
15
|
+
}
|
|
16
|
+
export interface XriftItemConfig {
|
|
17
|
+
type: 'item';
|
|
18
|
+
distDir: string;
|
|
19
|
+
name: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
thumbnailPath?: string;
|
|
22
|
+
ignore: string[];
|
|
23
|
+
permissions?: ItemPermissions;
|
|
24
|
+
}
|
|
25
|
+
export type XriftConfig = XriftWorldConfig | XriftItemConfig;
|
|
26
|
+
export declare const DEFAULT_IGNORE_PATTERNS: string[];
|
|
27
|
+
/**
|
|
28
|
+
* xrift.json の JSON 文字列をパースしてワールド設定を返す。
|
|
29
|
+
* "world" キーが存在しない場合はエラーをスローする。
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseWorldConfig(json: string): XriftWorldConfig;
|
|
32
|
+
/**
|
|
33
|
+
* xrift.json の JSON 文字列をパースしてアイテム設定を返す。
|
|
34
|
+
* "item" キーが存在しない場合はエラーをスローする。
|
|
35
|
+
*/
|
|
36
|
+
export declare function parseItemConfig(json: string): XriftItemConfig;
|
|
37
|
+
/**
|
|
38
|
+
* ignore パターンでファイルパスをフィルタリングする。
|
|
39
|
+
* マッチしたファイルを除外し、残ったファイルパスを返す。
|
|
40
|
+
*/
|
|
41
|
+
export declare function filterFiles(filePaths: string[], ignorePatterns: string[]): string[];
|
|
42
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKxD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAI7D,eAAO,MAAM,uBAAuB,UAA+B,CAAC;AAmBpE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAkC/D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CA+B7D;AAsBD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EAAE,EACnB,cAAc,EAAE,MAAM,EAAE,GACvB,MAAM,EAAE,CAIV"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { XriftSdkError } from './errors.js';
|
|
2
|
+
// --- Constants ---
|
|
3
|
+
export const DEFAULT_IGNORE_PATTERNS = ['__federation_shared_*.js'];
|
|
4
|
+
// --- Functions ---
|
|
5
|
+
function parseJson(json) {
|
|
6
|
+
let raw;
|
|
7
|
+
try {
|
|
8
|
+
raw = JSON.parse(json);
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
throw new XriftSdkError('Invalid JSON in xrift.json');
|
|
12
|
+
}
|
|
13
|
+
if (typeof raw !== 'object' || raw === null) {
|
|
14
|
+
throw new XriftSdkError('xrift.json must be a JSON object');
|
|
15
|
+
}
|
|
16
|
+
return raw;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* xrift.json の JSON 文字列をパースしてワールド設定を返す。
|
|
20
|
+
* "world" キーが存在しない場合はエラーをスローする。
|
|
21
|
+
*/
|
|
22
|
+
export function parseWorldConfig(json) {
|
|
23
|
+
const root = parseJson(json);
|
|
24
|
+
if (!root.world) {
|
|
25
|
+
throw new XriftSdkError('xrift.json does not contain a "world" key');
|
|
26
|
+
}
|
|
27
|
+
const raw = root.world;
|
|
28
|
+
if (typeof raw !== 'object' || raw === null) {
|
|
29
|
+
throw new XriftSdkError('"world" must be an object');
|
|
30
|
+
}
|
|
31
|
+
const obj = raw;
|
|
32
|
+
if (typeof obj.distDir !== 'string' || !obj.distDir) {
|
|
33
|
+
throw new XriftSdkError('"world.distDir" is required');
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
type: 'world',
|
|
37
|
+
distDir: normalizePath(obj.distDir),
|
|
38
|
+
name: typeof obj.title === 'string' && obj.title ? obj.title : 'Untitled',
|
|
39
|
+
description: typeof obj.description === 'string' ? obj.description : undefined,
|
|
40
|
+
thumbnailPath: typeof obj.thumbnailPath === 'string' ? obj.thumbnailPath : undefined,
|
|
41
|
+
ignore: mergeIgnorePatterns(obj.ignore),
|
|
42
|
+
physics: obj.physics,
|
|
43
|
+
camera: obj.camera,
|
|
44
|
+
permissions: obj.permissions,
|
|
45
|
+
outputBufferType: obj.outputBufferType,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* xrift.json の JSON 文字列をパースしてアイテム設定を返す。
|
|
50
|
+
* "item" キーが存在しない場合はエラーをスローする。
|
|
51
|
+
*/
|
|
52
|
+
export function parseItemConfig(json) {
|
|
53
|
+
const root = parseJson(json);
|
|
54
|
+
if (!root.item) {
|
|
55
|
+
throw new XriftSdkError('xrift.json does not contain an "item" key');
|
|
56
|
+
}
|
|
57
|
+
const raw = root.item;
|
|
58
|
+
if (typeof raw !== 'object' || raw === null) {
|
|
59
|
+
throw new XriftSdkError('"item" must be an object');
|
|
60
|
+
}
|
|
61
|
+
const obj = raw;
|
|
62
|
+
if (typeof obj.distDir !== 'string' || !obj.distDir) {
|
|
63
|
+
throw new XriftSdkError('"item.distDir" is required');
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
type: 'item',
|
|
67
|
+
distDir: normalizePath(obj.distDir),
|
|
68
|
+
name: typeof obj.title === 'string' && obj.title ? obj.title : 'Untitled',
|
|
69
|
+
description: typeof obj.description === 'string' ? obj.description : undefined,
|
|
70
|
+
thumbnailPath: typeof obj.thumbnailPath === 'string' ? obj.thumbnailPath : undefined,
|
|
71
|
+
ignore: mergeIgnorePatterns(obj.ignore),
|
|
72
|
+
permissions: obj.permissions,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function mergeIgnorePatterns(raw) {
|
|
76
|
+
const userPatterns = Array.isArray(raw) ? raw.filter((p) => typeof p === 'string') : [];
|
|
77
|
+
const merged = [...DEFAULT_IGNORE_PATTERNS];
|
|
78
|
+
for (const p of userPatterns) {
|
|
79
|
+
if (!merged.includes(p)) {
|
|
80
|
+
merged.push(p);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return merged;
|
|
84
|
+
}
|
|
85
|
+
/** "./dist" → "dist", "dist/" → "dist", "." → "" */
|
|
86
|
+
function normalizePath(p) {
|
|
87
|
+
return p
|
|
88
|
+
.replace(/^\.\//, '')
|
|
89
|
+
.replace(/\/+$/, '')
|
|
90
|
+
.replace(/^\.?$/, '');
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* ignore パターンでファイルパスをフィルタリングする。
|
|
94
|
+
* マッチしたファイルを除外し、残ったファイルパスを返す。
|
|
95
|
+
*/
|
|
96
|
+
export function filterFiles(filePaths, ignorePatterns) {
|
|
97
|
+
return filePaths.filter((filePath) => !matchesIgnorePattern(filePath, ignorePatterns));
|
|
98
|
+
}
|
|
99
|
+
function matchesIgnorePattern(filePath, patterns) {
|
|
100
|
+
return patterns.some((pattern) => {
|
|
101
|
+
const regex = new RegExp('^' +
|
|
102
|
+
pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '.*') +
|
|
103
|
+
'$');
|
|
104
|
+
const fileName = filePath.split('/').pop() ?? filePath;
|
|
105
|
+
return regex.test(filePath) || regex.test(fileName);
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { XriftClient } from './client.js';
|
|
2
2
|
export type { XriftClientConfig } from './client.js';
|
|
3
|
+
export { parseWorldConfig, parseItemConfig, filterFiles, DEFAULT_IGNORE_PATTERNS, } from './config.js';
|
|
4
|
+
export type { XriftConfig, XriftWorldConfig, XriftItemConfig, } from './config.js';
|
|
3
5
|
export { calculateContentHash } from './hash.js';
|
|
4
6
|
export { getMimeType } from './utils/mime.js';
|
|
5
7
|
export { XriftSdkError, XriftApiError, XriftAuthError, XriftNetworkError, } from './errors.js';
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGjD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGjD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC"}
|
package/dist/esm/index.js
CHANGED
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO;AACP,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO;AACP,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,SAAS;AACT,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,SAAS;AACT,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAOrB,OAAO;AACP,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO;AACP,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,SAAS;AACT,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,8BAA8B,EAC9B,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { UploadProgress } from '../types/common.js';
|
|
2
|
+
import type { WorldUploadResult } from '../types/worlds.js';
|
|
3
|
+
import type { ItemUploadResult } from '../types/items.js';
|
|
4
|
+
export interface UploadFromDirectoryBaseOptions {
|
|
5
|
+
token: string;
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
timeout?: number;
|
|
8
|
+
onProgress?: (progress: UploadProgress) => void;
|
|
9
|
+
}
|
|
10
|
+
export interface WorldUploadFromDirectoryOptions extends UploadFromDirectoryBaseOptions {
|
|
11
|
+
worldId?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ItemUploadFromDirectoryOptions extends UploadFromDirectoryBaseOptions {
|
|
14
|
+
itemId?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function uploadWorldFromDirectory(dirPath: string, options: WorldUploadFromDirectoryOptions): Promise<WorldUploadResult>;
|
|
17
|
+
export declare function uploadItemFromDirectory(dirPath: string, options: ItemUploadFromDirectoryOptions): Promise<ItemUploadResult>;
|
|
18
|
+
//# sourceMappingURL=upload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/node/upload.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAI1D,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,+BACf,SAAQ,8BAA8B;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,8BACf,SAAQ,8BAA8B;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,iBAAiB,CAAC,CA2B5B;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,gBAAgB,CAAC,CAwB3B"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { readFile, readdir, stat } from 'node:fs/promises';
|
|
2
|
+
import { join, relative } from 'node:path';
|
|
3
|
+
import { XriftClient } from '../client.js';
|
|
4
|
+
import { parseWorldConfig, parseItemConfig, filterFiles } from '../config.js';
|
|
5
|
+
import { XriftSdkError } from '../errors.js';
|
|
6
|
+
import { getMimeType } from '../utils/mime.js';
|
|
7
|
+
// --- Helpers ---
|
|
8
|
+
async function listFilesRecursively(dir) {
|
|
9
|
+
const results = [];
|
|
10
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
11
|
+
for (const entry of entries) {
|
|
12
|
+
const fullPath = join(dir, entry.name);
|
|
13
|
+
if (entry.isDirectory()) {
|
|
14
|
+
results.push(...(await listFilesRecursively(fullPath)));
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
results.push(fullPath);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return results;
|
|
21
|
+
}
|
|
22
|
+
async function buildUploadFiles(dirPath, distDir, ignorePatterns) {
|
|
23
|
+
const distPath = distDir ? join(dirPath, distDir) : dirPath;
|
|
24
|
+
let distStat;
|
|
25
|
+
try {
|
|
26
|
+
distStat = await stat(distPath);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
throw new XriftSdkError(`distDir not found: ${distPath}`);
|
|
30
|
+
}
|
|
31
|
+
if (!distStat.isDirectory()) {
|
|
32
|
+
throw new XriftSdkError(`distDir is not a directory: ${distPath}`);
|
|
33
|
+
}
|
|
34
|
+
const absolutePaths = await listFilesRecursively(distPath);
|
|
35
|
+
const relativePaths = absolutePaths.map((p) => relative(distPath, p));
|
|
36
|
+
const filtered = filterFiles(relativePaths, ignorePatterns);
|
|
37
|
+
const uploadFiles = await Promise.all(filtered.map(async (remotePath) => {
|
|
38
|
+
const fullPath = join(distPath, remotePath);
|
|
39
|
+
const data = await readFile(fullPath);
|
|
40
|
+
return {
|
|
41
|
+
remotePath,
|
|
42
|
+
size: data.byteLength,
|
|
43
|
+
contentType: getMimeType(remotePath),
|
|
44
|
+
data: data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength),
|
|
45
|
+
};
|
|
46
|
+
}));
|
|
47
|
+
return uploadFiles;
|
|
48
|
+
}
|
|
49
|
+
async function readConfigJson(dirPath) {
|
|
50
|
+
const configPath = join(dirPath, 'xrift.json');
|
|
51
|
+
try {
|
|
52
|
+
return await readFile(configPath, 'utf-8');
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
throw new XriftSdkError(`xrift.json not found: ${configPath}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// --- Public API ---
|
|
59
|
+
export async function uploadWorldFromDirectory(dirPath, options) {
|
|
60
|
+
const raw = await readConfigJson(dirPath);
|
|
61
|
+
const wc = parseWorldConfig(raw);
|
|
62
|
+
const uploadFiles = await buildUploadFiles(dirPath, wc.distDir, wc.ignore);
|
|
63
|
+
const client = new XriftClient({
|
|
64
|
+
token: options.token,
|
|
65
|
+
baseUrl: options.baseUrl,
|
|
66
|
+
timeout: options.timeout,
|
|
67
|
+
});
|
|
68
|
+
return client.worlds.upload(uploadFiles, {
|
|
69
|
+
worldId: options.worldId,
|
|
70
|
+
name: wc.name,
|
|
71
|
+
description: wc.description,
|
|
72
|
+
thumbnailPath: wc.thumbnailPath,
|
|
73
|
+
physics: wc.physics,
|
|
74
|
+
camera: wc.camera,
|
|
75
|
+
permissions: wc.permissions,
|
|
76
|
+
outputBufferType: wc.outputBufferType,
|
|
77
|
+
onProgress: options.onProgress,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
export async function uploadItemFromDirectory(dirPath, options) {
|
|
81
|
+
const raw = await readConfigJson(dirPath);
|
|
82
|
+
const ic = parseItemConfig(raw);
|
|
83
|
+
const uploadFiles = await buildUploadFiles(dirPath, ic.distDir, ic.ignore);
|
|
84
|
+
const client = new XriftClient({
|
|
85
|
+
token: options.token,
|
|
86
|
+
baseUrl: options.baseUrl,
|
|
87
|
+
timeout: options.timeout,
|
|
88
|
+
});
|
|
89
|
+
return client.items.upload(uploadFiles, {
|
|
90
|
+
itemId: options.itemId,
|
|
91
|
+
name: ic.name,
|
|
92
|
+
description: ic.description,
|
|
93
|
+
thumbnailPath: ic.thumbnailPath,
|
|
94
|
+
permissions: ic.permissions,
|
|
95
|
+
onProgress: options.onProgress,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/node/upload.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xrift/sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "XRift SDK - Universal API client for XRift platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cjs/index.cjs",
|
|
@@ -16,6 +16,16 @@
|
|
|
16
16
|
"types": "./dist/cjs/index.d.cts",
|
|
17
17
|
"default": "./dist/cjs/index.cjs"
|
|
18
18
|
}
|
|
19
|
+
},
|
|
20
|
+
"./node": {
|
|
21
|
+
"import": {
|
|
22
|
+
"types": "./dist/esm/node/index.d.ts",
|
|
23
|
+
"default": "./dist/esm/node/index.js"
|
|
24
|
+
},
|
|
25
|
+
"require": {
|
|
26
|
+
"types": "./dist/cjs/node/index.d.cts",
|
|
27
|
+
"default": "./dist/cjs/node/index.cjs"
|
|
28
|
+
}
|
|
19
29
|
}
|
|
20
30
|
},
|
|
21
31
|
"publishConfig": {
|