@rsdoctor/sdk 1.6.1 → 1.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/dist/index.cjs +57 -17
- package/dist/index.js +59 -19
- package/dist/sdk/sdk/core.d.cts +1 -0
- package/dist/sdk/sdk/core.d.ts +1 -0
- package/dist/sdk/sdk/types.d.cts +1 -1
- package/dist/sdk/sdk/types.d.ts +1 -1
- package/dist/sdk/utils/index.d.cts +1 -0
- package/dist/sdk/utils/index.d.ts +1 -0
- package/dist/sdk/utils/manifestSharding.d.cts +15 -0
- package/dist/sdk/utils/manifestSharding.d.ts +15 -0
- package/package.json +5 -5
package/dist/index.cjs
CHANGED
|
@@ -6568,6 +6568,41 @@ var __webpack_modules__ = {
|
|
|
6568
6568
|
return firstPkgDir || null;
|
|
6569
6569
|
}
|
|
6570
6570
|
__webpack_require__.n(dayjs_index_js_namespaceObject)()().format('YYYYMMDD');
|
|
6571
|
+
var promises_ = __webpack_require__("node:fs/promises"), promises_default = __webpack_require__.n(promises_);
|
|
6572
|
+
let external_node_stream_namespaceObject = require("node:stream");
|
|
6573
|
+
var external_node_zlib_ = __webpack_require__("node:zlib");
|
|
6574
|
+
async function writeManifestShards(jsonFragments, folder, options = {}) {
|
|
6575
|
+
if (0 === jsonFragments.length) throw Error('Cannot write empty JSON fragments.');
|
|
6576
|
+
let { index = 0, shardSize = 10485760 } = options;
|
|
6577
|
+
if (!Number.isSafeInteger(shardSize) || shardSize <= 0) throw Error('Manifest shard size must be a positive integer.');
|
|
6578
|
+
await promises_default().mkdir(folder, {
|
|
6579
|
+
recursive: !0
|
|
6580
|
+
});
|
|
6581
|
+
let files = [], shardParts = [], shardLength = 0, flushShard = async ()=>{
|
|
6582
|
+
if (0 === shardLength) return;
|
|
6583
|
+
let basename = String(index + files.length), filePath = external_node_path_default().resolve(folder, basename);
|
|
6584
|
+
await promises_default().writeFile(filePath, shardParts.join(''), 'utf8'), files.push({
|
|
6585
|
+
path: filePath,
|
|
6586
|
+
basename
|
|
6587
|
+
}), shardParts = [], shardLength = 0;
|
|
6588
|
+
}, appendEncodedText = async (encodedText)=>{
|
|
6589
|
+
let offset = 0;
|
|
6590
|
+
for(; offset < encodedText.length;){
|
|
6591
|
+
let length = Math.min(shardSize - shardLength, encodedText.length - offset);
|
|
6592
|
+
shardParts.push(encodedText.slice(offset, offset + length)), shardLength += length, offset += length, shardLength === shardSize && await flushShard();
|
|
6593
|
+
}
|
|
6594
|
+
}, compressor = external_node_stream_namespaceObject.Readable.from(jsonFragments, {
|
|
6595
|
+
objectMode: !1
|
|
6596
|
+
}).pipe((0, external_node_zlib_.createDeflate)()), base64Remainder = Buffer.alloc(0);
|
|
6597
|
+
for await (let chunk of compressor){
|
|
6598
|
+
let compressedChunk = Buffer.from(chunk), bytes = base64Remainder.length ? Buffer.concat([
|
|
6599
|
+
base64Remainder,
|
|
6600
|
+
compressedChunk
|
|
6601
|
+
]) : compressedChunk, encodableLength = bytes.length - bytes.length % 3;
|
|
6602
|
+
encodableLength > 0 && await appendEncodedText(bytes.subarray(0, encodableLength).toString('base64')), base64Remainder = Buffer.from(bytes.subarray(encodableLength));
|
|
6603
|
+
}
|
|
6604
|
+
return base64Remainder.length > 0 && await appendEncodedText(base64Remainder.toString('base64')), await flushShard(), files;
|
|
6605
|
+
}
|
|
6571
6606
|
class SDKCore {
|
|
6572
6607
|
constructor({ name, root }){
|
|
6573
6608
|
this.hooks = {
|
|
@@ -6654,20 +6689,21 @@ var __webpack_modules__ = {
|
|
|
6654
6689
|
return build_namespaceObject.Json.stringify(data);
|
|
6655
6690
|
}
|
|
6656
6691
|
})();
|
|
6657
|
-
|
|
6658
|
-
let fileOffset = 0;
|
|
6659
|
-
for (let str of jsonStr){
|
|
6660
|
-
let result = await this.writeToFolder(str, outputDir, key, fileOffset);
|
|
6661
|
-
fileOffset += result.files.length, urlsPromiseList.push(result);
|
|
6662
|
-
}
|
|
6663
|
-
} else urlsPromiseList.push(this.writeToFolder(jsonStr, outputDir, key));
|
|
6692
|
+
Array.isArray(jsonStr) ? urlsPromiseList.push(this.writeJsonFragmentsToFolder(jsonStr, outputDir, key)) : urlsPromiseList.push(this.writeToFolder(jsonStr, outputDir, key));
|
|
6664
6693
|
}
|
|
6665
6694
|
let dataUrls = await Promise.all(urlsPromiseList);
|
|
6666
6695
|
logger_namespaceObject.logger.debug(`SDKCore.writePieces extraConfig: ${JSON.stringify(this.extraConfig)}`, '[SDKCore.writePieces]'), this.cloudData = {
|
|
6667
6696
|
client: {
|
|
6668
6697
|
enableRoutes: this.getClientRoutes()
|
|
6669
6698
|
},
|
|
6670
|
-
data: dataUrls.reduce((t, item)=>
|
|
6699
|
+
data: dataUrls.reduce((t, item)=>{
|
|
6700
|
+
if (!Array.isArray(item.files)) return t[item.name] = item.files, t;
|
|
6701
|
+
let previous = t[item.name];
|
|
6702
|
+
return t[item.name] = [
|
|
6703
|
+
...Array.isArray(previous) ? previous : [],
|
|
6704
|
+
...item.files.map((e)=>e.path)
|
|
6705
|
+
], t;
|
|
6706
|
+
}, {})
|
|
6671
6707
|
};
|
|
6672
6708
|
}
|
|
6673
6709
|
async writeManifest() {
|
|
@@ -6685,15 +6721,19 @@ var __webpack_modules__ = {
|
|
|
6685
6721
|
}), manifestDiskPath;
|
|
6686
6722
|
}
|
|
6687
6723
|
writeToFolder(jsonStr, dir, key, index) {
|
|
6688
|
-
|
|
6689
|
-
|
|
6690
|
-
|
|
6691
|
-
|
|
6692
|
-
|
|
6693
|
-
|
|
6694
|
-
|
|
6695
|
-
|
|
6696
|
-
|
|
6724
|
+
return this.writeJsonFragmentsToFolder([
|
|
6725
|
+
jsonStr
|
|
6726
|
+
], dir, key, index);
|
|
6727
|
+
}
|
|
6728
|
+
async writeJsonFragmentsToFolder(jsonFragments, dir, key, index) {
|
|
6729
|
+
if (0 === jsonFragments.length) throw Error(`Cannot write empty JSON fragments for "${key}".`);
|
|
6730
|
+
let folder = external_node_path_default().resolve(dir, key);
|
|
6731
|
+
return {
|
|
6732
|
+
name: key,
|
|
6733
|
+
files: await writeManifestShards(jsonFragments, folder, {
|
|
6734
|
+
index
|
|
6735
|
+
})
|
|
6736
|
+
};
|
|
6697
6737
|
}
|
|
6698
6738
|
}
|
|
6699
6739
|
let sdk_require = (0, external_module_namespaceObject.createRequire)(__rslib_import_meta_url__);
|
package/dist/index.js
CHANGED
|
@@ -27,6 +27,9 @@ import { randomBytes } from "crypto";
|
|
|
27
27
|
import node_process from "node:process";
|
|
28
28
|
import { AsyncSeriesHook } from "tapable";
|
|
29
29
|
import dayjs from "../compiled/dayjs/index.js";
|
|
30
|
+
import node_fs_promises from "node:fs/promises";
|
|
31
|
+
import { Readable } from "node:stream";
|
|
32
|
+
import { createDeflate } from "node:zlib";
|
|
30
33
|
import { __webpack_require__ } from "./612.js";
|
|
31
34
|
import { fileURLToPath as __rspack_fileURLToPath } from "node:url";
|
|
32
35
|
let __rspack_createRequire_require = __rspack_createRequire(import.meta.url);
|
|
@@ -55,7 +58,7 @@ __webpack_require__.add({
|
|
|
55
58
|
});
|
|
56
59
|
},
|
|
57
60
|
"../../node_modules/.pnpm/body-parser@2.2.2/node_modules/body-parser/lib/read.js" (module, __unused_rspack_exports, __webpack_require__) {
|
|
58
|
-
var createError = __webpack_require__("../../node_modules/.pnpm/http-errors@2.0.1/node_modules/http-errors/index.js"), getBody = __webpack_require__("../../node_modules/.pnpm/raw-body@3.0.2/node_modules/raw-body/index.js"), iconv = __webpack_require__("../../node_modules/.pnpm/iconv-lite@0.7.0/node_modules/iconv-lite/lib/index.js"), onFinished = __webpack_require__("../../node_modules/.pnpm/on-finished@2.4.1/node_modules/on-finished/index.js"), zlib = __webpack_require__("node:zlib"), hasBody = __webpack_require__("../../node_modules/.pnpm/type-is@2.0.1/node_modules/type-is/index.js").hasBody, { getCharset } = __webpack_require__("../../node_modules/.pnpm/body-parser@2.2.2/node_modules/body-parser/lib/utils.js");
|
|
61
|
+
var createError = __webpack_require__("../../node_modules/.pnpm/http-errors@2.0.1/node_modules/http-errors/index.js"), getBody = __webpack_require__("../../node_modules/.pnpm/raw-body@3.0.2/node_modules/raw-body/index.js"), iconv = __webpack_require__("../../node_modules/.pnpm/iconv-lite@0.7.0/node_modules/iconv-lite/lib/index.js"), onFinished = __webpack_require__("../../node_modules/.pnpm/on-finished@2.4.1/node_modules/on-finished/index.js"), zlib = __webpack_require__("node:zlib?1e70"), hasBody = __webpack_require__("../../node_modules/.pnpm/type-is@2.0.1/node_modules/type-is/index.js").hasBody, { getCharset } = __webpack_require__("../../node_modules/.pnpm/body-parser@2.2.2/node_modules/body-parser/lib/utils.js");
|
|
59
62
|
module.exports = function(req, res, next, parse, debug, options) {
|
|
60
63
|
if (onFinished.isFinished(req)) {
|
|
61
64
|
debug('body already parsed'), next();
|
|
@@ -5130,7 +5133,7 @@ __webpack_require__.add({
|
|
|
5130
5133
|
"fs?8b28" (module) {
|
|
5131
5134
|
module.exports = __rspack_createRequire_require("fs");
|
|
5132
5135
|
},
|
|
5133
|
-
"node:zlib" (module) {
|
|
5136
|
+
"node:zlib?1e70" (module) {
|
|
5134
5137
|
module.exports = __rspack_createRequire_require("node:zlib");
|
|
5135
5138
|
},
|
|
5136
5139
|
"os?da1a" (module) {
|
|
@@ -6560,6 +6563,38 @@ function findRoot(startDir = process.cwd()) {
|
|
|
6560
6563
|
}
|
|
6561
6564
|
return firstPkgDir || null;
|
|
6562
6565
|
}
|
|
6566
|
+
async function writeManifestShards(jsonFragments, folder, options = {}) {
|
|
6567
|
+
if (0 === jsonFragments.length) throw Error('Cannot write empty JSON fragments.');
|
|
6568
|
+
let { index = 0, shardSize = 10485760 } = options;
|
|
6569
|
+
if (!Number.isSafeInteger(shardSize) || shardSize <= 0) throw Error('Manifest shard size must be a positive integer.');
|
|
6570
|
+
await node_fs_promises.mkdir(folder, {
|
|
6571
|
+
recursive: !0
|
|
6572
|
+
});
|
|
6573
|
+
let files = [], shardParts = [], shardLength = 0, flushShard = async ()=>{
|
|
6574
|
+
if (0 === shardLength) return;
|
|
6575
|
+
let basename = String(index + files.length), filePath = node_path.resolve(folder, basename);
|
|
6576
|
+
await node_fs_promises.writeFile(filePath, shardParts.join(''), 'utf8'), files.push({
|
|
6577
|
+
path: filePath,
|
|
6578
|
+
basename
|
|
6579
|
+
}), shardParts = [], shardLength = 0;
|
|
6580
|
+
}, appendEncodedText = async (encodedText)=>{
|
|
6581
|
+
let offset = 0;
|
|
6582
|
+
for(; offset < encodedText.length;){
|
|
6583
|
+
let length = Math.min(shardSize - shardLength, encodedText.length - offset);
|
|
6584
|
+
shardParts.push(encodedText.slice(offset, offset + length)), shardLength += length, offset += length, shardLength === shardSize && await flushShard();
|
|
6585
|
+
}
|
|
6586
|
+
}, compressor = Readable.from(jsonFragments, {
|
|
6587
|
+
objectMode: !1
|
|
6588
|
+
}).pipe(createDeflate()), base64Remainder = Buffer.alloc(0);
|
|
6589
|
+
for await (let chunk of compressor){
|
|
6590
|
+
let compressedChunk = Buffer.from(chunk), bytes = base64Remainder.length ? Buffer.concat([
|
|
6591
|
+
base64Remainder,
|
|
6592
|
+
compressedChunk
|
|
6593
|
+
]) : compressedChunk, encodableLength = bytes.length - bytes.length % 3;
|
|
6594
|
+
encodableLength > 0 && await appendEncodedText(bytes.subarray(0, encodableLength).toString('base64')), base64Remainder = Buffer.from(bytes.subarray(encodableLength));
|
|
6595
|
+
}
|
|
6596
|
+
return base64Remainder.length > 0 && await appendEncodedText(base64Remainder.toString('base64')), await flushShard(), files;
|
|
6597
|
+
}
|
|
6563
6598
|
dayjs().format('YYYYMMDD');
|
|
6564
6599
|
class SDKCore {
|
|
6565
6600
|
constructor({ name, root }){
|
|
@@ -6647,20 +6682,21 @@ class SDKCore {
|
|
|
6647
6682
|
return Json.stringify(data);
|
|
6648
6683
|
}
|
|
6649
6684
|
})();
|
|
6650
|
-
|
|
6651
|
-
let fileOffset = 0;
|
|
6652
|
-
for (let str of jsonStr){
|
|
6653
|
-
let result = await this.writeToFolder(str, outputDir, key, fileOffset);
|
|
6654
|
-
fileOffset += result.files.length, urlsPromiseList.push(result);
|
|
6655
|
-
}
|
|
6656
|
-
} else urlsPromiseList.push(this.writeToFolder(jsonStr, outputDir, key));
|
|
6685
|
+
Array.isArray(jsonStr) ? urlsPromiseList.push(this.writeJsonFragmentsToFolder(jsonStr, outputDir, key)) : urlsPromiseList.push(this.writeToFolder(jsonStr, outputDir, key));
|
|
6657
6686
|
}
|
|
6658
6687
|
let dataUrls = await Promise.all(urlsPromiseList);
|
|
6659
6688
|
logger.debug(`SDKCore.writePieces extraConfig: ${JSON.stringify(this.extraConfig)}`, '[SDKCore.writePieces]'), this.cloudData = {
|
|
6660
6689
|
client: {
|
|
6661
6690
|
enableRoutes: this.getClientRoutes()
|
|
6662
6691
|
},
|
|
6663
|
-
data: dataUrls.reduce((t, item)=>
|
|
6692
|
+
data: dataUrls.reduce((t, item)=>{
|
|
6693
|
+
if (!Array.isArray(item.files)) return t[item.name] = item.files, t;
|
|
6694
|
+
let previous = t[item.name];
|
|
6695
|
+
return t[item.name] = [
|
|
6696
|
+
...Array.isArray(previous) ? previous : [],
|
|
6697
|
+
...item.files.map((e)=>e.path)
|
|
6698
|
+
], t;
|
|
6699
|
+
}, {})
|
|
6664
6700
|
};
|
|
6665
6701
|
}
|
|
6666
6702
|
async writeManifest() {
|
|
@@ -6678,15 +6714,19 @@ class SDKCore {
|
|
|
6678
6714
|
}), manifestDiskPath;
|
|
6679
6715
|
}
|
|
6680
6716
|
writeToFolder(jsonStr, dir, key, index) {
|
|
6681
|
-
|
|
6682
|
-
|
|
6683
|
-
|
|
6684
|
-
|
|
6685
|
-
|
|
6686
|
-
|
|
6687
|
-
|
|
6688
|
-
|
|
6689
|
-
|
|
6717
|
+
return this.writeJsonFragmentsToFolder([
|
|
6718
|
+
jsonStr
|
|
6719
|
+
], dir, key, index);
|
|
6720
|
+
}
|
|
6721
|
+
async writeJsonFragmentsToFolder(jsonFragments, dir, key, index) {
|
|
6722
|
+
if (0 === jsonFragments.length) throw Error(`Cannot write empty JSON fragments for "${key}".`);
|
|
6723
|
+
let folder = node_path.resolve(dir, key);
|
|
6724
|
+
return {
|
|
6725
|
+
name: key,
|
|
6726
|
+
files: await writeManifestShards(jsonFragments, folder, {
|
|
6727
|
+
index
|
|
6728
|
+
})
|
|
6729
|
+
};
|
|
6690
6730
|
}
|
|
6691
6731
|
}
|
|
6692
6732
|
let source_map = __webpack_require__("../../node_modules/.pnpm/source-map@0.7.6/node_modules/source-map/source-map.js"), sdk_require = createRequire(import.meta.url);
|
package/dist/sdk/sdk/core.d.cts
CHANGED
|
@@ -29,5 +29,6 @@ export declare abstract class SDKCore<T extends RsdoctorSDKOptions> implements S
|
|
|
29
29
|
protected writeManifest(): Promise<string>;
|
|
30
30
|
saveManifest(data: Common.PlainObject, options: SDK.WriteStoreOptionsType): Promise<string>;
|
|
31
31
|
protected writeToFolder(jsonStr: string, dir: string, key: string, index?: number): Promise<DataWithUrl>;
|
|
32
|
+
protected writeJsonFragmentsToFolder(jsonFragments: string[], dir: string, key: string, index?: number): Promise<DataWithUrl>;
|
|
32
33
|
abstract onDataReport(): void | Promise<void>;
|
|
33
34
|
}
|
package/dist/sdk/sdk/core.d.ts
CHANGED
|
@@ -29,5 +29,6 @@ export declare abstract class SDKCore<T extends RsdoctorSDKOptions> implements S
|
|
|
29
29
|
protected writeManifest(): Promise<string>;
|
|
30
30
|
saveManifest(data: Common.PlainObject, options: SDK.WriteStoreOptionsType): Promise<string>;
|
|
31
31
|
protected writeToFolder(jsonStr: string, dir: string, key: string, index?: number): Promise<DataWithUrl>;
|
|
32
|
+
protected writeJsonFragmentsToFolder(jsonFragments: string[], dir: string, key: string, index?: number): Promise<DataWithUrl>;
|
|
32
33
|
abstract onDataReport(): void | Promise<void>;
|
|
33
34
|
}
|
package/dist/sdk/sdk/types.d.cts
CHANGED
package/dist/sdk/sdk/types.d.ts
CHANGED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const DEFAULT_MANIFEST_SHARD_SIZE: number;
|
|
2
|
+
interface WriteManifestShardsOptions {
|
|
3
|
+
index?: number;
|
|
4
|
+
shardSize?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface ManifestShardFile {
|
|
7
|
+
path: string;
|
|
8
|
+
basename: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Compress JSON fragments as one deflate stream, encode that stream as one
|
|
12
|
+
* continuous Base64 value, and write bounded physical shards.
|
|
13
|
+
*/
|
|
14
|
+
export declare function writeManifestShards(jsonFragments: string[], folder: string, options?: WriteManifestShardsOptions): Promise<ManifestShardFile[]>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const DEFAULT_MANIFEST_SHARD_SIZE: number;
|
|
2
|
+
interface WriteManifestShardsOptions {
|
|
3
|
+
index?: number;
|
|
4
|
+
shardSize?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface ManifestShardFile {
|
|
7
|
+
path: string;
|
|
8
|
+
basename: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Compress JSON fragments as one deflate stream, encode that stream as one
|
|
12
|
+
* continuous Base64 value, and write bounded physical shards.
|
|
13
|
+
*/
|
|
14
|
+
export declare function writeManifestShards(jsonFragments: string[], folder: string, options?: WriteManifestShardsOptions): Promise<ManifestShardFile[]>;
|
|
15
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsdoctor/sdk",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.2",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/web-infra-dev/rsdoctor",
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
"safer-buffer": "2.1.2",
|
|
33
33
|
"socket.io": "4.8.1",
|
|
34
34
|
"tapable": "2.3.3",
|
|
35
|
-
"@rsdoctor/client": "1.6.
|
|
36
|
-
"@rsdoctor/graph": "1.6.
|
|
37
|
-
"@rsdoctor/utils": "1.6.
|
|
38
|
-
"@rsdoctor/types": "1.6.
|
|
35
|
+
"@rsdoctor/client": "1.6.2",
|
|
36
|
+
"@rsdoctor/graph": "1.6.2",
|
|
37
|
+
"@rsdoctor/utils": "1.6.2",
|
|
38
|
+
"@rsdoctor/types": "1.6.2"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@types/body-parser": "1.19.6",
|