@xrift/cli 0.3.0 → 0.4.0
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/commands/__tests__/create.test.d.ts +2 -0
- package/dist/commands/__tests__/create.test.d.ts.map +1 -0
- package/dist/commands/__tests__/create.test.js +105 -0
- package/dist/commands/__tests__/create.test.js.map +1 -0
- package/dist/lib/constants.d.ts +4 -3
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +4 -3
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/create-helpers.d.ts +20 -0
- package/dist/lib/create-helpers.d.ts.map +1 -0
- package/dist/lib/create-helpers.js +20 -0
- package/dist/lib/create-helpers.js.map +1 -0
- package/dist/lib/upload.d.ts.map +1 -1
- package/dist/lib/upload.js +42 -4
- package/dist/lib/upload.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/create.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { describe, it, expect } from '@jest/globals';
|
|
2
|
+
import { isValidProjectName, needsInteraction, } from '../../lib/create-helpers.js';
|
|
3
|
+
describe('create command', () => {
|
|
4
|
+
describe('isValidProjectName', () => {
|
|
5
|
+
it('有効なプロジェクト名の場合は true を返す', () => {
|
|
6
|
+
expect(isValidProjectName('my-world')).toBe(true);
|
|
7
|
+
expect(isValidProjectName('test-project-123')).toBe(true);
|
|
8
|
+
expect(isValidProjectName('simple')).toBe(true);
|
|
9
|
+
expect(isValidProjectName('a-b-c-d-e-f')).toBe(true);
|
|
10
|
+
expect(isValidProjectName('world-2024')).toBe(true);
|
|
11
|
+
});
|
|
12
|
+
it('大文字が含まれる場合は false を返す', () => {
|
|
13
|
+
expect(isValidProjectName('MyWorld')).toBe(false);
|
|
14
|
+
expect(isValidProjectName('Test')).toBe(false);
|
|
15
|
+
});
|
|
16
|
+
it('アンダースコアが含まれる場合は false を返す', () => {
|
|
17
|
+
expect(isValidProjectName('my_world')).toBe(false);
|
|
18
|
+
expect(isValidProjectName('test_project')).toBe(false);
|
|
19
|
+
});
|
|
20
|
+
it('スペースが含まれる場合は false を返す', () => {
|
|
21
|
+
expect(isValidProjectName('my world')).toBe(false);
|
|
22
|
+
expect(isValidProjectName('test project')).toBe(false);
|
|
23
|
+
});
|
|
24
|
+
it('特殊文字が含まれる場合は false を返す', () => {
|
|
25
|
+
expect(isValidProjectName('my@world')).toBe(false);
|
|
26
|
+
expect(isValidProjectName('test!project')).toBe(false);
|
|
27
|
+
expect(isValidProjectName('world.project')).toBe(false);
|
|
28
|
+
});
|
|
29
|
+
it('空文字の場合は false を返す', () => {
|
|
30
|
+
expect(isValidProjectName('')).toBe(false);
|
|
31
|
+
});
|
|
32
|
+
it('ハイフンのみの場合は true を返す', () => {
|
|
33
|
+
expect(isValidProjectName('-')).toBe(true);
|
|
34
|
+
expect(isValidProjectName('---')).toBe(true);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('needsInteraction', () => {
|
|
38
|
+
it('全てのオプションが指定されている場合は false を返す', () => {
|
|
39
|
+
const options = {
|
|
40
|
+
here: true,
|
|
41
|
+
skipInstall: true,
|
|
42
|
+
template: 'custom/repo',
|
|
43
|
+
interactive: undefined,
|
|
44
|
+
};
|
|
45
|
+
expect(needsInteraction('my-project', options)).toBe(false);
|
|
46
|
+
});
|
|
47
|
+
it('プロジェクト名が未指定の場合は true を返す', () => {
|
|
48
|
+
const options = {
|
|
49
|
+
here: true,
|
|
50
|
+
skipInstall: true,
|
|
51
|
+
interactive: undefined,
|
|
52
|
+
};
|
|
53
|
+
expect(needsInteraction(undefined, options)).toBe(true);
|
|
54
|
+
});
|
|
55
|
+
it('here オプションが未指定の場合は true を返す', () => {
|
|
56
|
+
const options = {
|
|
57
|
+
skipInstall: true,
|
|
58
|
+
interactive: undefined,
|
|
59
|
+
};
|
|
60
|
+
expect(needsInteraction('my-project', options)).toBe(true);
|
|
61
|
+
});
|
|
62
|
+
it('skipInstall オプションが未指定の場合は true を返す', () => {
|
|
63
|
+
const options = {
|
|
64
|
+
here: true,
|
|
65
|
+
interactive: undefined,
|
|
66
|
+
};
|
|
67
|
+
expect(needsInteraction('my-project', options)).toBe(true);
|
|
68
|
+
});
|
|
69
|
+
it('interactive が false の場合は false を返す', () => {
|
|
70
|
+
const options = {
|
|
71
|
+
interactive: false,
|
|
72
|
+
};
|
|
73
|
+
expect(needsInteraction(undefined, options)).toBe(false);
|
|
74
|
+
});
|
|
75
|
+
it('複数のオプションが未指定の場合は true を返す', () => {
|
|
76
|
+
const options = {
|
|
77
|
+
interactive: undefined,
|
|
78
|
+
};
|
|
79
|
+
expect(needsInteraction(undefined, options)).toBe(true);
|
|
80
|
+
});
|
|
81
|
+
it('プロジェクト名とhereが指定され、skipInstallが未指定の場合は true を返す', () => {
|
|
82
|
+
const options = {
|
|
83
|
+
here: true,
|
|
84
|
+
interactive: undefined,
|
|
85
|
+
};
|
|
86
|
+
expect(needsInteraction('my-project', options)).toBe(true);
|
|
87
|
+
});
|
|
88
|
+
it('--no-interactive フラグがある場合、他のオプションに関わらず false を返す', () => {
|
|
89
|
+
const options = {
|
|
90
|
+
interactive: false,
|
|
91
|
+
};
|
|
92
|
+
expect(needsInteraction(undefined, options)).toBe(false);
|
|
93
|
+
});
|
|
94
|
+
it('全てのオプションが空でもinteractiveがfalseならfalseを返す', () => {
|
|
95
|
+
const options = {
|
|
96
|
+
here: undefined,
|
|
97
|
+
skipInstall: undefined,
|
|
98
|
+
template: undefined,
|
|
99
|
+
interactive: false,
|
|
100
|
+
};
|
|
101
|
+
expect(needsInteraction('my-project', options)).toBe(false);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=create.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/create.test.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/constants.d.ts
CHANGED
|
@@ -13,7 +13,8 @@ export declare const AUTH_CONFIG_FILE: string;
|
|
|
13
13
|
export declare const PROJECT_CONFIG_FILE = "xrift.json";
|
|
14
14
|
export declare const PROJECT_META_DIR = ".xrift";
|
|
15
15
|
export declare const WORLD_META_FILE = "world.json";
|
|
16
|
-
export declare const WORLD_CREATE_PATH = "/api/worlds";
|
|
17
|
-
export declare const WORLD_UPDATE_PATH = "/api/worlds";
|
|
18
|
-
export declare const WORLD_UPLOAD_URL_PATH = "/api/worlds";
|
|
16
|
+
export declare const WORLD_CREATE_PATH = "/api/public/v1/worlds";
|
|
17
|
+
export declare const WORLD_UPDATE_PATH = "/api/public/v1/worlds";
|
|
18
|
+
export declare const WORLD_UPLOAD_URL_PATH = "/api/public/v1/worlds";
|
|
19
|
+
export declare const WORLD_COMPLETE_PATH = "/api/public/v1/worlds";
|
|
19
20
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAGA;;GAEG;AAGH,eAAO,MAAM,YAAY,QAAuD,CAAC;AAGjF,eAAO,MAAM,YAAY,QAA4D,CAAC;AAGtF,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,eAAO,MAAM,gBAAgB,+BAA+B,CAAC;AAC7D,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAC9D,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,aAAa,cAAc,CAAC;AAGzC,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,gBAAgB,QAAuC,CAAC;AACrE,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAChD,eAAO,MAAM,gBAAgB,WAAW,CAAC;AACzC,eAAO,MAAM,eAAe,eAAe,CAAC;AAG5C,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAGA;;GAEG;AAGH,eAAO,MAAM,YAAY,QAAuD,CAAC;AAGjF,eAAO,MAAM,YAAY,QAA4D,CAAC;AAGtF,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,eAAO,MAAM,gBAAgB,+BAA+B,CAAC;AAC7D,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAC9D,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,aAAa,cAAc,CAAC;AAGzC,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,gBAAgB,QAAuC,CAAC;AACrE,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAChD,eAAO,MAAM,gBAAgB,WAAW,CAAC;AACzC,eAAO,MAAM,eAAe,eAAe,CAAC;AAG5C,eAAO,MAAM,iBAAiB,0BAA0B,CAAC;AACzD,eAAO,MAAM,iBAAiB,0BAA0B,CAAC;AACzD,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAC7D,eAAO,MAAM,mBAAmB,0BAA0B,CAAC"}
|
package/dist/lib/constants.js
CHANGED
|
@@ -20,7 +20,8 @@ export const PROJECT_CONFIG_FILE = 'xrift.json';
|
|
|
20
20
|
export const PROJECT_META_DIR = '.xrift';
|
|
21
21
|
export const WORLD_META_FILE = 'world.json';
|
|
22
22
|
// World API endpoints
|
|
23
|
-
export const WORLD_CREATE_PATH = '/api/worlds';
|
|
24
|
-
export const WORLD_UPDATE_PATH = '/api/worlds';
|
|
25
|
-
export const WORLD_UPLOAD_URL_PATH = '/api/worlds';
|
|
23
|
+
export const WORLD_CREATE_PATH = '/api/public/v1/worlds';
|
|
24
|
+
export const WORLD_UPDATE_PATH = '/api/public/v1/worlds';
|
|
25
|
+
export const WORLD_UPLOAD_URL_PATH = '/api/public/v1/worlds';
|
|
26
|
+
export const WORLD_COMPLETE_PATH = '/api/public/v1/worlds'; // :id/complete をつけて使用
|
|
26
27
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB;;GAEG;AAEH,eAAe;AACf,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,uBAAuB,CAAC;AAEjF,4CAA4C;AAC5C,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,uBAAuB,CAAC;AAEtF,iBAAiB;AACjB,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,4BAA4B,CAAC;AAC7D,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC,CAAC,+BAA+B;AAC9F,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAC;AAEzC,oBAAoB;AACpB,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AACzC,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAE5C,sBAAsB;AACtB,MAAM,CAAC,MAAM,iBAAiB,GAAG,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB;;GAEG;AAEH,eAAe;AACf,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,uBAAuB,CAAC;AAEjF,4CAA4C;AAC5C,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,uBAAuB,CAAC;AAEtF,iBAAiB;AACjB,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,4BAA4B,CAAC;AAC7D,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC,CAAC,+BAA+B;AAC9F,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAC;AAEzC,oBAAoB;AACpB,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AACzC,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAE5C,sBAAsB;AACtB,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AACzD,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAC7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,CAAC,sBAAsB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* create コマンドのヘルパー関数
|
|
3
|
+
* テスト可能にするため、依存関係のない純粋な関数として分離
|
|
4
|
+
*/
|
|
5
|
+
export interface CreateOptions {
|
|
6
|
+
template?: string;
|
|
7
|
+
skipInstall?: boolean;
|
|
8
|
+
here?: boolean;
|
|
9
|
+
interactive?: boolean;
|
|
10
|
+
y?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* プロジェクト名が有効かバリデーション
|
|
14
|
+
*/
|
|
15
|
+
export declare function isValidProjectName(name: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* 対話式モードが必要か判定
|
|
18
|
+
*/
|
|
19
|
+
export declare function needsInteraction(projectName: string | undefined, options: CreateOptions): boolean;
|
|
20
|
+
//# sourceMappingURL=create-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/create-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,CAAC,CAAC,EAAE,OAAO,CAAC;CACb;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,aAAa,GACrB,OAAO,CAOT"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* create コマンドのヘルパー関数
|
|
3
|
+
* テスト可能にするため、依存関係のない純粋な関数として分離
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* プロジェクト名が有効かバリデーション
|
|
7
|
+
*/
|
|
8
|
+
export function isValidProjectName(name) {
|
|
9
|
+
return /^[a-z0-9-]+$/.test(name);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* 対話式モードが必要か判定
|
|
13
|
+
*/
|
|
14
|
+
export function needsInteraction(projectName, options) {
|
|
15
|
+
return (options.interactive !== false &&
|
|
16
|
+
(!projectName ||
|
|
17
|
+
options.here === undefined ||
|
|
18
|
+
options.skipInstall === undefined));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=create-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-helpers.js","sourceRoot":"","sources":["../../src/lib/create-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAA+B,EAC/B,OAAsB;IAEtB,OAAO,CACL,OAAO,CAAC,WAAW,KAAK,KAAK;QAC7B,CAAC,CAAC,WAAW;YACX,OAAO,CAAC,IAAI,KAAK,SAAS;YAC1B,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CACrC,CAAC;AACJ,CAAC"}
|
package/dist/lib/upload.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/lib/upload.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/lib/upload.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,wBAAsB,WAAW,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiL5E"}
|
package/dist/lib/upload.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import fs from 'node:fs/promises';
|
|
3
|
+
import crypto from 'node:crypto';
|
|
3
4
|
import chalk from 'chalk';
|
|
4
5
|
import ora from 'ora';
|
|
5
6
|
import cliProgress from 'cli-progress';
|
|
6
7
|
import axios from 'axios';
|
|
7
8
|
import { loadProjectConfig, loadWorldMetadata, saveWorldMetadata, validateDistDir, scanDirectory, } from './project-config.js';
|
|
8
9
|
import { getAuthenticatedClient } from './api.js';
|
|
9
|
-
import { WORLD_CREATE_PATH, WORLD_UPDATE_PATH } from './constants.js';
|
|
10
|
+
import { WORLD_CREATE_PATH, WORLD_UPDATE_PATH, WORLD_COMPLETE_PATH } from './constants.js';
|
|
10
11
|
/**
|
|
11
12
|
* ワールドをアップロード
|
|
12
13
|
*/
|
|
@@ -67,11 +68,18 @@ export async function uploadWorld(cwd = process.cwd()) {
|
|
|
67
68
|
throw error;
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
|
-
// 7.
|
|
71
|
+
// 7. contentHashとfileSizeを計算
|
|
72
|
+
spinner = ora('ファイルのハッシュを計算中...').start();
|
|
73
|
+
const contentHash = await calculateContentHash(uploadFiles);
|
|
74
|
+
const fileSize = calculateTotalSize(uploadFiles);
|
|
75
|
+
spinner.succeed(chalk.green(`ハッシュ計算完了 (contentHash: ${contentHash}, fileSize: ${fileSize} bytes)`));
|
|
76
|
+
// 8. 署名付きURLを取得
|
|
71
77
|
spinner = ora('アップロード用URLを取得中...').start();
|
|
72
78
|
let signedUrls;
|
|
73
79
|
try {
|
|
74
80
|
const response = await client.post(`${WORLD_UPDATE_PATH}/${worldId}/upload-urls`, {
|
|
81
|
+
contentHash,
|
|
82
|
+
fileSize,
|
|
75
83
|
files: uploadFiles.map((f) => ({
|
|
76
84
|
path: f.remotePath,
|
|
77
85
|
size: f.size,
|
|
@@ -84,7 +92,7 @@ export async function uploadWorld(cwd = process.cwd()) {
|
|
|
84
92
|
spinner.fail(chalk.red('アップロードURLの取得に失敗しました'));
|
|
85
93
|
throw error;
|
|
86
94
|
}
|
|
87
|
-
//
|
|
95
|
+
// 9. ファイルをアップロード
|
|
88
96
|
console.log(chalk.blue('\n📤 ファイルをアップロード中...\n'));
|
|
89
97
|
const progressBar = new cliProgress.SingleBar({
|
|
90
98
|
format: `${chalk.cyan('{bar}')} | {percentage}% | {value}/{total} ファイル | {filename}`,
|
|
@@ -116,7 +124,17 @@ export async function uploadWorld(cwd = process.cwd()) {
|
|
|
116
124
|
}
|
|
117
125
|
progressBar.update(uploadFiles.length, { filename: '完了' });
|
|
118
126
|
progressBar.stop();
|
|
119
|
-
//
|
|
127
|
+
// 10. アップロード完了通知
|
|
128
|
+
spinner = ora('アップロード完了を通知中...').start();
|
|
129
|
+
try {
|
|
130
|
+
await client.post(`${WORLD_COMPLETE_PATH}/${worldId}/complete`);
|
|
131
|
+
spinner.succeed(chalk.green('アップロード完了を通知しました'));
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
spinner.fail(chalk.red('アップロード完了通知に失敗しました'));
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
// 11. メタデータを保存
|
|
120
138
|
await saveWorldMetadata({
|
|
121
139
|
id: worldId,
|
|
122
140
|
createdAt: existingMetadata?.createdAt || new Date().toISOString(),
|
|
@@ -135,6 +153,26 @@ export async function uploadWorld(cwd = process.cwd()) {
|
|
|
135
153
|
throw error;
|
|
136
154
|
}
|
|
137
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* 全ファイルを結合してSHA-256ハッシュを計算(先頭12文字)
|
|
158
|
+
*/
|
|
159
|
+
async function calculateContentHash(uploadFiles) {
|
|
160
|
+
const hash = crypto.createHash('sha256');
|
|
161
|
+
// ファイルをパスでソートして順序を確定
|
|
162
|
+
const sortedFiles = [...uploadFiles].sort((a, b) => a.remotePath.localeCompare(b.remotePath));
|
|
163
|
+
for (const fileInfo of sortedFiles) {
|
|
164
|
+
const fileBuffer = await fs.readFile(fileInfo.localPath);
|
|
165
|
+
hash.update(fileBuffer);
|
|
166
|
+
}
|
|
167
|
+
const fullHash = hash.digest('hex');
|
|
168
|
+
return fullHash.substring(0, 12); // 先頭12文字
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* 全ファイルのサイズ合計を計算
|
|
172
|
+
*/
|
|
173
|
+
function calculateTotalSize(uploadFiles) {
|
|
174
|
+
return uploadFiles.reduce((total, file) => total + file.size, 0);
|
|
175
|
+
}
|
|
138
176
|
/**
|
|
139
177
|
* ファイルのMIMEタイプを取得
|
|
140
178
|
*/
|
package/dist/lib/upload.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/lib/upload.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAiB,MAAM,KAAK,CAAC;AACpC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,aAAa,GACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/lib/upload.ts"],"names":[],"mappings":"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"}
|