@remotion/media-parser 4.0.313 → 4.0.315
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/containers/webm/parse-ebml.d.ts +2 -1
- package/dist/containers/webm/parse-ebml.js +20 -15
- package/dist/containers/webm/segments.js +6 -2
- package/dist/esm/index.mjs +25 -16
- package/dist/esm/worker-server-entry.mjs +24 -15
- package/dist/esm/worker-web-entry.mjs +24 -15
- package/dist/index.d.ts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { BufferIterator } from '../../iterator/buffer-iterator';
|
|
2
|
+
import type { MediaParserLogLevel } from '../../log';
|
|
2
3
|
import type { PossibleEbml } from './segments/all-segments';
|
|
3
4
|
import type { WebmRequiredStatesForProcessing } from './state-for-processing';
|
|
4
5
|
export type Prettify<T> = {
|
|
5
6
|
[K in keyof T]: T[K];
|
|
6
7
|
} & {};
|
|
7
|
-
export declare const parseEbml: (iterator: BufferIterator, statesForProcessing: WebmRequiredStatesForProcessing | null) => Promise<Prettify<PossibleEbml
|
|
8
|
+
export declare const parseEbml: (iterator: BufferIterator, statesForProcessing: WebmRequiredStatesForProcessing | null, logLevel: MediaParserLogLevel) => Promise<Prettify<PossibleEbml> | null>;
|
|
8
9
|
export declare const postprocessEbml: ({ offset, ebml, statesForProcessing: { webmState, callbacks, logLevel, onAudioTrack, onVideoTrack, structureState, avcState, }, }: {
|
|
9
10
|
offset: number;
|
|
10
11
|
ebml: Prettify<PossibleEbml>;
|
|
@@ -1,25 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.postprocessEbml = exports.parseEbml = void 0;
|
|
4
|
+
const log_1 = require("../../log");
|
|
4
5
|
const register_track_1 = require("../../register-track");
|
|
5
6
|
const get_sample_from_block_1 = require("./get-sample-from-block");
|
|
6
7
|
const make_track_1 = require("./make-track");
|
|
7
8
|
const all_segments_1 = require("./segments/all-segments");
|
|
8
|
-
const parseEbml = async (iterator, statesForProcessing) => {
|
|
9
|
+
const parseEbml = async (iterator, statesForProcessing, logLevel) => {
|
|
9
10
|
const hex = iterator.getMatroskaSegmentId();
|
|
10
11
|
if (hex === null) {
|
|
11
12
|
throw new Error('Not enough bytes left to parse EBML - this should not happen');
|
|
12
13
|
}
|
|
13
|
-
const hasInMap = all_segments_1.ebmlMap[hex];
|
|
14
|
-
if (!hasInMap) {
|
|
15
|
-
throw new Error(`Don't know how to parse EBML hex ID ${JSON.stringify(hex)}`);
|
|
16
|
-
}
|
|
17
14
|
const off = iterator.counter.getOffset();
|
|
18
15
|
const size = iterator.getVint();
|
|
19
16
|
const minVintWidth = iterator.counter.getOffset() - off;
|
|
20
17
|
if (size === null) {
|
|
21
18
|
throw new Error('Not enough bytes left to parse EBML - this should not happen');
|
|
22
19
|
}
|
|
20
|
+
const hasInMap = all_segments_1.ebmlMap[hex];
|
|
21
|
+
if (!hasInMap) {
|
|
22
|
+
log_1.Log.verbose(logLevel, `Unknown EBML hex ID ${JSON.stringify(hex)}`);
|
|
23
|
+
iterator.discard(size);
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
23
26
|
if (hasInMap.type === 'uint') {
|
|
24
27
|
const beforeUintOffset = iterator.counter.getOffset();
|
|
25
28
|
const value = size === 0 ? 0 : iterator.getUint(size);
|
|
@@ -83,16 +86,18 @@ const parseEbml = async (iterator, statesForProcessing) => {
|
|
|
83
86
|
break;
|
|
84
87
|
}
|
|
85
88
|
const offset = iterator.counter.getOffset();
|
|
86
|
-
const value = await (0, exports.parseEbml)(iterator, statesForProcessing);
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
89
|
+
const value = await (0, exports.parseEbml)(iterator, statesForProcessing, logLevel);
|
|
90
|
+
if (value) {
|
|
91
|
+
const remapped = statesForProcessing
|
|
92
|
+
? // eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
93
|
+
await (0, exports.postprocessEbml)({
|
|
94
|
+
offset,
|
|
95
|
+
ebml: value,
|
|
96
|
+
statesForProcessing,
|
|
97
|
+
})
|
|
98
|
+
: value;
|
|
99
|
+
children.push(remapped);
|
|
100
|
+
}
|
|
96
101
|
const offsetNow = iterator.counter.getOffset();
|
|
97
102
|
if (offsetNow - startOffset > size) {
|
|
98
103
|
throw new Error(`Offset ${offsetNow - startOffset} is larger than the length of the hex ${size}`);
|
|
@@ -75,17 +75,21 @@ const expectSegment = async ({ statesForProcessing, isInsideSegment, iterator, l
|
|
|
75
75
|
headerReadSoFar: iterator.counter.getOffset() - offset,
|
|
76
76
|
statesForProcessing,
|
|
77
77
|
iterator,
|
|
78
|
+
logLevel,
|
|
78
79
|
});
|
|
79
80
|
return segment;
|
|
80
81
|
};
|
|
81
82
|
exports.expectSegment = expectSegment;
|
|
82
|
-
const parseSegment = async ({ segmentId, length, iterator, headerReadSoFar, statesForProcessing, }) => {
|
|
83
|
+
const parseSegment = async ({ segmentId, length, iterator, headerReadSoFar, statesForProcessing, logLevel, }) => {
|
|
83
84
|
if (length < 0) {
|
|
84
85
|
throw new Error(`Expected length of ${segmentId} to be greater or equal 0`);
|
|
85
86
|
}
|
|
86
87
|
iterator.counter.decrement(headerReadSoFar);
|
|
87
88
|
const offset = iterator.counter.getOffset();
|
|
88
|
-
const ebml = await (0, parse_ebml_1.parseEbml)(iterator, statesForProcessing);
|
|
89
|
+
const ebml = await (0, parse_ebml_1.parseEbml)(iterator, statesForProcessing, logLevel);
|
|
90
|
+
if (ebml === null) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
89
93
|
if (!statesForProcessing) {
|
|
90
94
|
return ebml;
|
|
91
95
|
}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -6473,21 +6473,23 @@ var getSampleFromBlock = async ({
|
|
|
6473
6473
|
};
|
|
6474
6474
|
|
|
6475
6475
|
// src/containers/webm/parse-ebml.ts
|
|
6476
|
-
var parseEbml = async (iterator, statesForProcessing) => {
|
|
6476
|
+
var parseEbml = async (iterator, statesForProcessing, logLevel) => {
|
|
6477
6477
|
const hex = iterator.getMatroskaSegmentId();
|
|
6478
6478
|
if (hex === null) {
|
|
6479
6479
|
throw new Error("Not enough bytes left to parse EBML - this should not happen");
|
|
6480
6480
|
}
|
|
6481
|
-
const hasInMap = ebmlMap[hex];
|
|
6482
|
-
if (!hasInMap) {
|
|
6483
|
-
throw new Error(`Don't know how to parse EBML hex ID ${JSON.stringify(hex)}`);
|
|
6484
|
-
}
|
|
6485
6481
|
const off = iterator.counter.getOffset();
|
|
6486
6482
|
const size = iterator.getVint();
|
|
6487
6483
|
const minVintWidth = iterator.counter.getOffset() - off;
|
|
6488
6484
|
if (size === null) {
|
|
6489
6485
|
throw new Error("Not enough bytes left to parse EBML - this should not happen");
|
|
6490
6486
|
}
|
|
6487
|
+
const hasInMap = ebmlMap[hex];
|
|
6488
|
+
if (!hasInMap) {
|
|
6489
|
+
Log.verbose(logLevel, `Unknown EBML hex ID ${JSON.stringify(hex)}`);
|
|
6490
|
+
iterator.discard(size);
|
|
6491
|
+
return null;
|
|
6492
|
+
}
|
|
6491
6493
|
if (hasInMap.type === "uint") {
|
|
6492
6494
|
const beforeUintOffset = iterator.counter.getOffset();
|
|
6493
6495
|
const value = size === 0 ? 0 : iterator.getUint(size);
|
|
@@ -6542,13 +6544,15 @@ var parseEbml = async (iterator, statesForProcessing) => {
|
|
|
6542
6544
|
break;
|
|
6543
6545
|
}
|
|
6544
6546
|
const offset = iterator.counter.getOffset();
|
|
6545
|
-
const value = await parseEbml(iterator, statesForProcessing);
|
|
6546
|
-
|
|
6547
|
-
|
|
6548
|
-
|
|
6549
|
-
|
|
6550
|
-
|
|
6551
|
-
|
|
6547
|
+
const value = await parseEbml(iterator, statesForProcessing, logLevel);
|
|
6548
|
+
if (value) {
|
|
6549
|
+
const remapped = statesForProcessing ? await postprocessEbml({
|
|
6550
|
+
offset,
|
|
6551
|
+
ebml: value,
|
|
6552
|
+
statesForProcessing
|
|
6553
|
+
}) : value;
|
|
6554
|
+
children.push(remapped);
|
|
6555
|
+
}
|
|
6552
6556
|
const offsetNow = iterator.counter.getOffset();
|
|
6553
6557
|
if (offsetNow - startOffset > size) {
|
|
6554
6558
|
throw new Error(`Offset ${offsetNow - startOffset} is larger than the length of the hex ${size}`);
|
|
@@ -15363,7 +15367,8 @@ var expectSegment = async ({
|
|
|
15363
15367
|
length: size,
|
|
15364
15368
|
headerReadSoFar: iterator.counter.getOffset() - offset,
|
|
15365
15369
|
statesForProcessing,
|
|
15366
|
-
iterator
|
|
15370
|
+
iterator,
|
|
15371
|
+
logLevel
|
|
15367
15372
|
});
|
|
15368
15373
|
return segment;
|
|
15369
15374
|
};
|
|
@@ -15372,14 +15377,18 @@ var parseSegment = async ({
|
|
|
15372
15377
|
length,
|
|
15373
15378
|
iterator,
|
|
15374
15379
|
headerReadSoFar,
|
|
15375
|
-
statesForProcessing
|
|
15380
|
+
statesForProcessing,
|
|
15381
|
+
logLevel
|
|
15376
15382
|
}) => {
|
|
15377
15383
|
if (length < 0) {
|
|
15378
15384
|
throw new Error(`Expected length of ${segmentId} to be greater or equal 0`);
|
|
15379
15385
|
}
|
|
15380
15386
|
iterator.counter.decrement(headerReadSoFar);
|
|
15381
15387
|
const offset = iterator.counter.getOffset();
|
|
15382
|
-
const ebml = await parseEbml(iterator, statesForProcessing);
|
|
15388
|
+
const ebml = await parseEbml(iterator, statesForProcessing, logLevel);
|
|
15389
|
+
if (ebml === null) {
|
|
15390
|
+
return null;
|
|
15391
|
+
}
|
|
15383
15392
|
if (!statesForProcessing) {
|
|
15384
15393
|
return ebml;
|
|
15385
15394
|
}
|
|
@@ -17870,7 +17879,7 @@ var downloadAndParseMedia = async (options) => {
|
|
|
17870
17879
|
return returnValue;
|
|
17871
17880
|
};
|
|
17872
17881
|
// src/version.ts
|
|
17873
|
-
var VERSION = "4.0.
|
|
17882
|
+
var VERSION = "4.0.315";
|
|
17874
17883
|
|
|
17875
17884
|
// src/index.ts
|
|
17876
17885
|
var MediaParserInternals = {
|
|
@@ -15200,21 +15200,23 @@ var getSampleFromBlock = async ({
|
|
|
15200
15200
|
};
|
|
15201
15201
|
|
|
15202
15202
|
// src/containers/webm/parse-ebml.ts
|
|
15203
|
-
var parseEbml = async (iterator, statesForProcessing) => {
|
|
15203
|
+
var parseEbml = async (iterator, statesForProcessing, logLevel) => {
|
|
15204
15204
|
const hex = iterator.getMatroskaSegmentId();
|
|
15205
15205
|
if (hex === null) {
|
|
15206
15206
|
throw new Error("Not enough bytes left to parse EBML - this should not happen");
|
|
15207
15207
|
}
|
|
15208
|
-
const hasInMap = ebmlMap[hex];
|
|
15209
|
-
if (!hasInMap) {
|
|
15210
|
-
throw new Error(`Don't know how to parse EBML hex ID ${JSON.stringify(hex)}`);
|
|
15211
|
-
}
|
|
15212
15208
|
const off = iterator.counter.getOffset();
|
|
15213
15209
|
const size = iterator.getVint();
|
|
15214
15210
|
const minVintWidth = iterator.counter.getOffset() - off;
|
|
15215
15211
|
if (size === null) {
|
|
15216
15212
|
throw new Error("Not enough bytes left to parse EBML - this should not happen");
|
|
15217
15213
|
}
|
|
15214
|
+
const hasInMap = ebmlMap[hex];
|
|
15215
|
+
if (!hasInMap) {
|
|
15216
|
+
Log.verbose(logLevel, `Unknown EBML hex ID ${JSON.stringify(hex)}`);
|
|
15217
|
+
iterator.discard(size);
|
|
15218
|
+
return null;
|
|
15219
|
+
}
|
|
15218
15220
|
if (hasInMap.type === "uint") {
|
|
15219
15221
|
const beforeUintOffset = iterator.counter.getOffset();
|
|
15220
15222
|
const value = size === 0 ? 0 : iterator.getUint(size);
|
|
@@ -15269,13 +15271,15 @@ var parseEbml = async (iterator, statesForProcessing) => {
|
|
|
15269
15271
|
break;
|
|
15270
15272
|
}
|
|
15271
15273
|
const offset = iterator.counter.getOffset();
|
|
15272
|
-
const value = await parseEbml(iterator, statesForProcessing);
|
|
15273
|
-
|
|
15274
|
-
|
|
15275
|
-
|
|
15276
|
-
|
|
15277
|
-
|
|
15278
|
-
|
|
15274
|
+
const value = await parseEbml(iterator, statesForProcessing, logLevel);
|
|
15275
|
+
if (value) {
|
|
15276
|
+
const remapped = statesForProcessing ? await postprocessEbml({
|
|
15277
|
+
offset,
|
|
15278
|
+
ebml: value,
|
|
15279
|
+
statesForProcessing
|
|
15280
|
+
}) : value;
|
|
15281
|
+
children.push(remapped);
|
|
15282
|
+
}
|
|
15279
15283
|
const offsetNow = iterator.counter.getOffset();
|
|
15280
15284
|
if (offsetNow - startOffset > size) {
|
|
15281
15285
|
throw new Error(`Offset ${offsetNow - startOffset} is larger than the length of the hex ${size}`);
|
|
@@ -15491,7 +15495,8 @@ var expectSegment = async ({
|
|
|
15491
15495
|
length: size,
|
|
15492
15496
|
headerReadSoFar: iterator.counter.getOffset() - offset,
|
|
15493
15497
|
statesForProcessing,
|
|
15494
|
-
iterator
|
|
15498
|
+
iterator,
|
|
15499
|
+
logLevel
|
|
15495
15500
|
});
|
|
15496
15501
|
return segment;
|
|
15497
15502
|
};
|
|
@@ -15500,14 +15505,18 @@ var parseSegment = async ({
|
|
|
15500
15505
|
length,
|
|
15501
15506
|
iterator,
|
|
15502
15507
|
headerReadSoFar,
|
|
15503
|
-
statesForProcessing
|
|
15508
|
+
statesForProcessing,
|
|
15509
|
+
logLevel
|
|
15504
15510
|
}) => {
|
|
15505
15511
|
if (length < 0) {
|
|
15506
15512
|
throw new Error(`Expected length of ${segmentId} to be greater or equal 0`);
|
|
15507
15513
|
}
|
|
15508
15514
|
iterator.counter.decrement(headerReadSoFar);
|
|
15509
15515
|
const offset = iterator.counter.getOffset();
|
|
15510
|
-
const ebml = await parseEbml(iterator, statesForProcessing);
|
|
15516
|
+
const ebml = await parseEbml(iterator, statesForProcessing, logLevel);
|
|
15517
|
+
if (ebml === null) {
|
|
15518
|
+
return null;
|
|
15519
|
+
}
|
|
15511
15520
|
if (!statesForProcessing) {
|
|
15512
15521
|
return ebml;
|
|
15513
15522
|
}
|
|
@@ -15069,21 +15069,23 @@ var getSampleFromBlock = async ({
|
|
|
15069
15069
|
};
|
|
15070
15070
|
|
|
15071
15071
|
// src/containers/webm/parse-ebml.ts
|
|
15072
|
-
var parseEbml = async (iterator, statesForProcessing) => {
|
|
15072
|
+
var parseEbml = async (iterator, statesForProcessing, logLevel) => {
|
|
15073
15073
|
const hex = iterator.getMatroskaSegmentId();
|
|
15074
15074
|
if (hex === null) {
|
|
15075
15075
|
throw new Error("Not enough bytes left to parse EBML - this should not happen");
|
|
15076
15076
|
}
|
|
15077
|
-
const hasInMap = ebmlMap[hex];
|
|
15078
|
-
if (!hasInMap) {
|
|
15079
|
-
throw new Error(`Don't know how to parse EBML hex ID ${JSON.stringify(hex)}`);
|
|
15080
|
-
}
|
|
15081
15077
|
const off = iterator.counter.getOffset();
|
|
15082
15078
|
const size = iterator.getVint();
|
|
15083
15079
|
const minVintWidth = iterator.counter.getOffset() - off;
|
|
15084
15080
|
if (size === null) {
|
|
15085
15081
|
throw new Error("Not enough bytes left to parse EBML - this should not happen");
|
|
15086
15082
|
}
|
|
15083
|
+
const hasInMap = ebmlMap[hex];
|
|
15084
|
+
if (!hasInMap) {
|
|
15085
|
+
Log.verbose(logLevel, `Unknown EBML hex ID ${JSON.stringify(hex)}`);
|
|
15086
|
+
iterator.discard(size);
|
|
15087
|
+
return null;
|
|
15088
|
+
}
|
|
15087
15089
|
if (hasInMap.type === "uint") {
|
|
15088
15090
|
const beforeUintOffset = iterator.counter.getOffset();
|
|
15089
15091
|
const value = size === 0 ? 0 : iterator.getUint(size);
|
|
@@ -15138,13 +15140,15 @@ var parseEbml = async (iterator, statesForProcessing) => {
|
|
|
15138
15140
|
break;
|
|
15139
15141
|
}
|
|
15140
15142
|
const offset = iterator.counter.getOffset();
|
|
15141
|
-
const value = await parseEbml(iterator, statesForProcessing);
|
|
15142
|
-
|
|
15143
|
-
|
|
15144
|
-
|
|
15145
|
-
|
|
15146
|
-
|
|
15147
|
-
|
|
15143
|
+
const value = await parseEbml(iterator, statesForProcessing, logLevel);
|
|
15144
|
+
if (value) {
|
|
15145
|
+
const remapped = statesForProcessing ? await postprocessEbml({
|
|
15146
|
+
offset,
|
|
15147
|
+
ebml: value,
|
|
15148
|
+
statesForProcessing
|
|
15149
|
+
}) : value;
|
|
15150
|
+
children.push(remapped);
|
|
15151
|
+
}
|
|
15148
15152
|
const offsetNow = iterator.counter.getOffset();
|
|
15149
15153
|
if (offsetNow - startOffset > size) {
|
|
15150
15154
|
throw new Error(`Offset ${offsetNow - startOffset} is larger than the length of the hex ${size}`);
|
|
@@ -15360,7 +15364,8 @@ var expectSegment = async ({
|
|
|
15360
15364
|
length: size,
|
|
15361
15365
|
headerReadSoFar: iterator.counter.getOffset() - offset,
|
|
15362
15366
|
statesForProcessing,
|
|
15363
|
-
iterator
|
|
15367
|
+
iterator,
|
|
15368
|
+
logLevel
|
|
15364
15369
|
});
|
|
15365
15370
|
return segment;
|
|
15366
15371
|
};
|
|
@@ -15369,14 +15374,18 @@ var parseSegment = async ({
|
|
|
15369
15374
|
length,
|
|
15370
15375
|
iterator,
|
|
15371
15376
|
headerReadSoFar,
|
|
15372
|
-
statesForProcessing
|
|
15377
|
+
statesForProcessing,
|
|
15378
|
+
logLevel
|
|
15373
15379
|
}) => {
|
|
15374
15380
|
if (length < 0) {
|
|
15375
15381
|
throw new Error(`Expected length of ${segmentId} to be greater or equal 0`);
|
|
15376
15382
|
}
|
|
15377
15383
|
iterator.counter.decrement(headerReadSoFar);
|
|
15378
15384
|
const offset = iterator.counter.getOffset();
|
|
15379
|
-
const ebml = await parseEbml(iterator, statesForProcessing);
|
|
15385
|
+
const ebml = await parseEbml(iterator, statesForProcessing, logLevel);
|
|
15386
|
+
if (ebml === null) {
|
|
15387
|
+
return null;
|
|
15388
|
+
}
|
|
15380
15389
|
if (!statesForProcessing) {
|
|
15381
15390
|
return ebml;
|
|
15382
15391
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1260,7 +1260,7 @@ export declare const MediaParserInternals: {
|
|
|
1260
1260
|
size: number;
|
|
1261
1261
|
offset: number;
|
|
1262
1262
|
}) => import("./containers/iso-base-media/ftyp").FtypBox;
|
|
1263
|
-
parseEbml: (iterator: import("./iterator/buffer-iterator").BufferIterator, statesForProcessing: import("./containers/webm/state-for-processing").WebmRequiredStatesForProcessing | null) => Promise<import("./containers/webm/parse-ebml").Prettify<PossibleEbml
|
|
1263
|
+
parseEbml: (iterator: import("./iterator/buffer-iterator").BufferIterator, statesForProcessing: import("./containers/webm/state-for-processing").WebmRequiredStatesForProcessing | null, logLevel: MediaParserLogLevel) => Promise<import("./containers/webm/parse-ebml").Prettify<PossibleEbml> | null>;
|
|
1264
1264
|
parseMvhd: ({ iterator, offset, size, }: {
|
|
1265
1265
|
iterator: import("./iterator/buffer-iterator").BufferIterator;
|
|
1266
1266
|
offset: number;
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "4.0.
|
|
1
|
+
export declare const VERSION = "4.0.315";
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
"url": "https://github.com/remotion-dev/remotion/tree/main/packages/media-parser"
|
|
4
4
|
},
|
|
5
5
|
"name": "@remotion/media-parser",
|
|
6
|
-
"version": "4.0.
|
|
6
|
+
"version": "4.0.315",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"sideEffects": false,
|
|
9
9
|
"devDependencies": {
|
|
10
10
|
"@types/wicg-file-system-access": "2023.10.5",
|
|
11
11
|
"eslint": "9.19.0",
|
|
12
12
|
"@types/bun": "1.2.8",
|
|
13
|
-
"@remotion/example-videos": "4.0.
|
|
14
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
13
|
+
"@remotion/example-videos": "4.0.315",
|
|
14
|
+
"@remotion/eslint-config-internal": "4.0.315"
|
|
15
15
|
},
|
|
16
16
|
"publishConfig": {
|
|
17
17
|
"access": "public"
|