@vertesia/memory 0.24.0-dev.202601221707
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/LICENSE +13 -0
- package/README.md +473 -0
- package/lib/cjs/Builder.js +186 -0
- package/lib/cjs/Builder.js.map +1 -0
- package/lib/cjs/ContentObject.js +114 -0
- package/lib/cjs/ContentObject.js.map +1 -0
- package/lib/cjs/ContentSource.js +82 -0
- package/lib/cjs/ContentSource.js.map +1 -0
- package/lib/cjs/MemoryPack.js +228 -0
- package/lib/cjs/MemoryPack.js.map +1 -0
- package/lib/cjs/MemoryPackBuilder.js +47 -0
- package/lib/cjs/MemoryPackBuilder.js.map +1 -0
- package/lib/cjs/commands/copy.js +53 -0
- package/lib/cjs/commands/copy.js.map +1 -0
- package/lib/cjs/commands/exec.js +82 -0
- package/lib/cjs/commands/exec.js.map +1 -0
- package/lib/cjs/index.js +28 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/package.json +3 -0
- package/lib/cjs/utils/cmdline.js +90 -0
- package/lib/cjs/utils/cmdline.js.map +1 -0
- package/lib/cjs/utils/rewrite.js +166 -0
- package/lib/cjs/utils/rewrite.js.map +1 -0
- package/lib/cjs/utils/stream.js +27 -0
- package/lib/cjs/utils/stream.js.map +1 -0
- package/lib/cjs/utils/tar.js +185 -0
- package/lib/cjs/utils/tar.js.map +1 -0
- package/lib/esm/Builder.js +178 -0
- package/lib/esm/Builder.js.map +1 -0
- package/lib/esm/ContentObject.js +103 -0
- package/lib/esm/ContentObject.js.map +1 -0
- package/lib/esm/ContentSource.js +75 -0
- package/lib/esm/ContentSource.js.map +1 -0
- package/lib/esm/MemoryPack.js +218 -0
- package/lib/esm/MemoryPack.js.map +1 -0
- package/lib/esm/MemoryPackBuilder.js +43 -0
- package/lib/esm/MemoryPackBuilder.js.map +1 -0
- package/lib/esm/commands/copy.js +50 -0
- package/lib/esm/commands/copy.js.map +1 -0
- package/lib/esm/commands/exec.js +75 -0
- package/lib/esm/commands/exec.js.map +1 -0
- package/lib/esm/index.js +7 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/utils/cmdline.js +86 -0
- package/lib/esm/utils/cmdline.js.map +1 -0
- package/lib/esm/utils/rewrite.js +161 -0
- package/lib/esm/utils/rewrite.js.map +1 -0
- package/lib/esm/utils/stream.js +23 -0
- package/lib/esm/utils/stream.js.map +1 -0
- package/lib/esm/utils/tar.js +175 -0
- package/lib/esm/utils/tar.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/types/Builder.d.ts +72 -0
- package/lib/types/Builder.d.ts.map +1 -0
- package/lib/types/ContentObject.d.ts +43 -0
- package/lib/types/ContentObject.d.ts.map +1 -0
- package/lib/types/ContentSource.d.ts +32 -0
- package/lib/types/ContentSource.d.ts.map +1 -0
- package/lib/types/MemoryPack.d.ts +46 -0
- package/lib/types/MemoryPack.d.ts.map +1 -0
- package/lib/types/MemoryPackBuilder.d.ts +18 -0
- package/lib/types/MemoryPackBuilder.d.ts.map +1 -0
- package/lib/types/commands/copy.d.ts +8 -0
- package/lib/types/commands/copy.d.ts.map +1 -0
- package/lib/types/commands/exec.d.ts +7 -0
- package/lib/types/commands/exec.d.ts.map +1 -0
- package/lib/types/index.d.ts +14 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/utils/cmdline.d.ts +10 -0
- package/lib/types/utils/cmdline.d.ts.map +1 -0
- package/lib/types/utils/rewrite.d.ts +38 -0
- package/lib/types/utils/rewrite.d.ts.map +1 -0
- package/lib/types/utils/stream.d.ts +9 -0
- package/lib/types/utils/stream.d.ts.map +1 -0
- package/lib/types/utils/tar.d.ts +40 -0
- package/lib/types/utils/tar.d.ts.map +1 -0
- package/package.json +53 -0
- package/src/Builder.ts +239 -0
- package/src/ContentObject.ts +114 -0
- package/src/ContentSource.ts +88 -0
- package/src/MemoryPack.ts +233 -0
- package/src/MemoryPackBuilder.ts +55 -0
- package/src/builder.test.ts +214 -0
- package/src/commands/copy.ts +53 -0
- package/src/commands/exec.test.ts +22 -0
- package/src/commands/exec.ts +83 -0
- package/src/index.ts +14 -0
- package/src/utils/cmdline.test.ts +32 -0
- package/src/utils/cmdline.ts +92 -0
- package/src/utils/rewrite.test.ts +65 -0
- package/src/utils/rewrite.ts +167 -0
- package/src/utils/stream.test.ts +13 -0
- package/src/utils/stream.ts +27 -0
- package/src/utils/tar.test.ts +48 -0
- package/src/utils/tar.ts +203 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { AsyncObjectWalker } from "@vertesia/json";
|
|
2
|
+
import { mkdtempSync, rmSync } from "fs";
|
|
3
|
+
import os from "os";
|
|
4
|
+
import { join, resolve } from "path";
|
|
5
|
+
import { copy } from "./commands/copy.js";
|
|
6
|
+
import { exec } from "./commands/exec.js";
|
|
7
|
+
import { ContentObject, DocxObject, JsonObject, MediaObject, PdfObject } from "./ContentObject.js";
|
|
8
|
+
import { AbstractContentSource, TextSource } from "./ContentSource.js";
|
|
9
|
+
import { loadMemoryPack } from "./MemoryPack.js";
|
|
10
|
+
import { MemoryPackBuilder } from "./MemoryPackBuilder.js";
|
|
11
|
+
export class Builder {
|
|
12
|
+
options;
|
|
13
|
+
static instance;
|
|
14
|
+
static getInstance() {
|
|
15
|
+
if (!Builder.instance) {
|
|
16
|
+
throw new Error("No builder instance found");
|
|
17
|
+
}
|
|
18
|
+
return Builder.instance;
|
|
19
|
+
}
|
|
20
|
+
_vars;
|
|
21
|
+
_tmpdir;
|
|
22
|
+
memory;
|
|
23
|
+
constructor(options = {}) {
|
|
24
|
+
this.options = options;
|
|
25
|
+
this.memory = new MemoryPackBuilder(this);
|
|
26
|
+
this._vars = options.vars || {};
|
|
27
|
+
Builder.instance = this;
|
|
28
|
+
}
|
|
29
|
+
vars() {
|
|
30
|
+
return this._vars;
|
|
31
|
+
}
|
|
32
|
+
tmpdir() {
|
|
33
|
+
if (!this._tmpdir) {
|
|
34
|
+
this._tmpdir = mkdtempSync(join(os.tmpdir(), 'becomposable-memo-'));
|
|
35
|
+
}
|
|
36
|
+
return this._tmpdir;
|
|
37
|
+
}
|
|
38
|
+
from(location, options) {
|
|
39
|
+
return loadMemoryPack(location).then((memory) => {
|
|
40
|
+
return this.memory.load(memory, options);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
addEntry(path, source) {
|
|
44
|
+
this.memory.add(path, source);
|
|
45
|
+
}
|
|
46
|
+
copy(location, path, options = {}) {
|
|
47
|
+
copy(this, location, path, options);
|
|
48
|
+
}
|
|
49
|
+
copyText(text, path) {
|
|
50
|
+
copy(this, new TextSource(text), path);
|
|
51
|
+
}
|
|
52
|
+
exec(cmd, options) {
|
|
53
|
+
return exec(cmd, options);
|
|
54
|
+
}
|
|
55
|
+
content(location, encoding) {
|
|
56
|
+
const source = AbstractContentSource.resolve(location);
|
|
57
|
+
if (Array.isArray(source)) {
|
|
58
|
+
return source.map(s => new ContentObject(this, s, encoding));
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
return new ContentObject(this, source, encoding);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
json(location) {
|
|
65
|
+
const source = AbstractContentSource.resolve(location);
|
|
66
|
+
if (Array.isArray(source)) {
|
|
67
|
+
return source.map(s => new JsonObject(this, s));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
return new JsonObject(this, source);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
pdf(location) {
|
|
74
|
+
const source = AbstractContentSource.resolve(location);
|
|
75
|
+
if (Array.isArray(source)) {
|
|
76
|
+
return source.map(s => new PdfObject(this, s));
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
return new PdfObject(this, source);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
docx(location) {
|
|
83
|
+
const source = AbstractContentSource.resolve(location);
|
|
84
|
+
if (Array.isArray(source)) {
|
|
85
|
+
return source.map(s => new DocxObject(this, s));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
return new DocxObject(this, source);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
media(location, options) {
|
|
92
|
+
const source = AbstractContentSource.resolve(location);
|
|
93
|
+
if (Array.isArray(source)) {
|
|
94
|
+
return source.map(s => new MediaObject(this, s, options));
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
return new MediaObject(this, source, options);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async build(object) {
|
|
101
|
+
try {
|
|
102
|
+
let { fileName, publishName } = this._getOutputNames();
|
|
103
|
+
// resolve all content objects values from the context object
|
|
104
|
+
object = await resolveContextObject(object);
|
|
105
|
+
// write the memory to a file
|
|
106
|
+
fileName = await this.memory.build(fileName, object);
|
|
107
|
+
let target = fileName;
|
|
108
|
+
if (publishName) {
|
|
109
|
+
try {
|
|
110
|
+
target = await this.options.publish(fileName, publishName);
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
rmSync(fileName);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
this.options.quiet || console.log(`Memory saved to ${target}`);
|
|
117
|
+
return target;
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
if (this._tmpdir) {
|
|
121
|
+
rmSync(this._tmpdir, { recursive: true });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
_getOutputNames() {
|
|
126
|
+
const options = this.options;
|
|
127
|
+
if (!options.out) {
|
|
128
|
+
options.out = "memory.tar";
|
|
129
|
+
}
|
|
130
|
+
let fileName;
|
|
131
|
+
let publishName;
|
|
132
|
+
const out = options.out;
|
|
133
|
+
if (out.startsWith("memory:")) {
|
|
134
|
+
if (!options.publish) {
|
|
135
|
+
throw new Error(`The publish option is required for "${out}" output`);
|
|
136
|
+
}
|
|
137
|
+
// force gzip when publishing
|
|
138
|
+
options.gzip = true;
|
|
139
|
+
// create a temporary path for the output
|
|
140
|
+
fileName = createTmpBaseName(this.tmpdir());
|
|
141
|
+
publishName = out.substring("memory:".length);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
fileName = resolve(out);
|
|
145
|
+
}
|
|
146
|
+
return { fileName, publishName };
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function resolveContextObject(object) {
|
|
150
|
+
return new AsyncObjectWalker().map(object, async (_key, value) => {
|
|
151
|
+
if (value instanceof ContentObject) {
|
|
152
|
+
return await value.getText();
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
return value;
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
function createTmpBaseName(tmpdir) {
|
|
160
|
+
return join(tmpdir, `.composable-memory-${Date.now()}.tar`);
|
|
161
|
+
}
|
|
162
|
+
export function buildMemoryPack(recipeFn, options) {
|
|
163
|
+
const builder = new Builder(options);
|
|
164
|
+
return recipeFn({
|
|
165
|
+
vars: builder.vars.bind(builder),
|
|
166
|
+
tmpdir: builder.tmpdir.bind(builder),
|
|
167
|
+
exec: builder.exec.bind(builder),
|
|
168
|
+
from: builder.from.bind(builder),
|
|
169
|
+
content: builder.content.bind(builder),
|
|
170
|
+
json: builder.json.bind(builder),
|
|
171
|
+
pdf: builder.pdf.bind(builder),
|
|
172
|
+
docx: builder.docx.bind(builder),
|
|
173
|
+
media: builder.media.bind(builder),
|
|
174
|
+
copy: builder.copy.bind(builder),
|
|
175
|
+
copyText: builder.copyText.bind(builder),
|
|
176
|
+
}).then(metadata => builder.build(metadata));
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=Builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.js","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { manyToMarkdown, pdfToText, pdfToTextBuffer, transformImage, transformImageToBuffer } from "@vertesia/converters";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import { PassThrough, Readable } from "stream";
|
|
4
|
+
export class ContentObject {
|
|
5
|
+
builder;
|
|
6
|
+
source;
|
|
7
|
+
encoding;
|
|
8
|
+
constructor(builder, source, encoding = "utf-8") {
|
|
9
|
+
this.builder = builder;
|
|
10
|
+
this.source = source;
|
|
11
|
+
this.encoding = encoding;
|
|
12
|
+
}
|
|
13
|
+
getContent() {
|
|
14
|
+
return this.source.getContent();
|
|
15
|
+
}
|
|
16
|
+
getStream() {
|
|
17
|
+
return this.source.getStream();
|
|
18
|
+
}
|
|
19
|
+
copyTo(entry) {
|
|
20
|
+
this.builder.addEntry(entry, this);
|
|
21
|
+
}
|
|
22
|
+
async copyToFile(file) {
|
|
23
|
+
const input = await this.getStream();
|
|
24
|
+
const out = fs.createWriteStream(file);
|
|
25
|
+
const stream = input.pipe(out);
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
const handleError = (err) => {
|
|
28
|
+
reject(err);
|
|
29
|
+
out.close();
|
|
30
|
+
};
|
|
31
|
+
stream.on('finish', () => {
|
|
32
|
+
resolve(stream);
|
|
33
|
+
out.close();
|
|
34
|
+
});
|
|
35
|
+
input.on('error', handleError);
|
|
36
|
+
stream.on('error', handleError);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get a text representation of the object
|
|
41
|
+
*/
|
|
42
|
+
async getText(encoding) {
|
|
43
|
+
const t = (await this.getContent()).toString(encoding || this.encoding);
|
|
44
|
+
return t;
|
|
45
|
+
}
|
|
46
|
+
getJsonValue() {
|
|
47
|
+
return this.getText();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export class JsonObject extends ContentObject {
|
|
51
|
+
async getJsonValue() {
|
|
52
|
+
return JSON.parse(await this.getText());
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export class MediaObject extends ContentObject {
|
|
56
|
+
options;
|
|
57
|
+
constructor(builder, source, options = {}) {
|
|
58
|
+
super(builder, source);
|
|
59
|
+
this.options = options;
|
|
60
|
+
this.encoding = "base64";
|
|
61
|
+
}
|
|
62
|
+
async getStream() {
|
|
63
|
+
const stream = await super.getStream();
|
|
64
|
+
const out = new PassThrough();
|
|
65
|
+
await transformImage(stream, out, this.options);
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
async getContent() {
|
|
69
|
+
const stream = await super.getStream();
|
|
70
|
+
return await transformImageToBuffer(stream, this.options);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export class PdfObject extends ContentObject {
|
|
74
|
+
constructor(builder, source) {
|
|
75
|
+
super(builder, source);
|
|
76
|
+
}
|
|
77
|
+
async getStream() {
|
|
78
|
+
return Readable.from(await this.getContent());
|
|
79
|
+
}
|
|
80
|
+
async getContent() {
|
|
81
|
+
return pdfToTextBuffer(await super.getContent());
|
|
82
|
+
}
|
|
83
|
+
async getText() {
|
|
84
|
+
return await pdfToText(await super.getContent());
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
export class DocxObject extends ContentObject {
|
|
88
|
+
constructor(builder, source) {
|
|
89
|
+
super(builder, source);
|
|
90
|
+
}
|
|
91
|
+
async getBuffer() {
|
|
92
|
+
return Buffer.from(await manyToMarkdown(await this.getStream(), "docx"), "utf-8");
|
|
93
|
+
}
|
|
94
|
+
async getStream() {
|
|
95
|
+
const stream = new PassThrough();
|
|
96
|
+
stream.end(await this.getBuffer());
|
|
97
|
+
return stream;
|
|
98
|
+
}
|
|
99
|
+
async getText() {
|
|
100
|
+
return await manyToMarkdown(await this.getStream(), "docx");
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=ContentObject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContentObject.js","sourceRoot":"","sources":["../../src/ContentObject.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { createReadStream } from "fs";
|
|
2
|
+
import { readFile } from "fs/promises";
|
|
3
|
+
import { globSync } from 'glob';
|
|
4
|
+
import { basename, extname, resolve } from "path";
|
|
5
|
+
import { Readable } from "stream";
|
|
6
|
+
export class AbstractContentSource {
|
|
7
|
+
async getStream() {
|
|
8
|
+
return Readable.from(await this.getContent());
|
|
9
|
+
}
|
|
10
|
+
static resolve(source) {
|
|
11
|
+
if (typeof source === 'string') {
|
|
12
|
+
return FileSource.resolve(source);
|
|
13
|
+
}
|
|
14
|
+
else if (source instanceof AbstractContentSource) {
|
|
15
|
+
return source;
|
|
16
|
+
}
|
|
17
|
+
throw new Error("Unsupported content source: " + source);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export class BufferSource extends AbstractContentSource {
|
|
21
|
+
buffer;
|
|
22
|
+
constructor(buffer) {
|
|
23
|
+
super();
|
|
24
|
+
this.buffer = buffer;
|
|
25
|
+
}
|
|
26
|
+
getContent() {
|
|
27
|
+
return Promise.resolve(this.buffer);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export class TextSource extends AbstractContentSource {
|
|
31
|
+
value;
|
|
32
|
+
encoding;
|
|
33
|
+
constructor(value, encoding = "utf-8") {
|
|
34
|
+
super();
|
|
35
|
+
this.value = value;
|
|
36
|
+
this.encoding = encoding;
|
|
37
|
+
}
|
|
38
|
+
getContent() {
|
|
39
|
+
return Promise.resolve(Buffer.from(this.value, this.encoding));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export class FileSource extends AbstractContentSource {
|
|
43
|
+
file;
|
|
44
|
+
constructor(file, resolvePath = true) {
|
|
45
|
+
super();
|
|
46
|
+
this.file = resolvePath ? resolve(file) : file;
|
|
47
|
+
}
|
|
48
|
+
get path() {
|
|
49
|
+
return this.file;
|
|
50
|
+
}
|
|
51
|
+
get name() {
|
|
52
|
+
return basename(this.file);
|
|
53
|
+
}
|
|
54
|
+
get extname() {
|
|
55
|
+
return extname(this.file);
|
|
56
|
+
}
|
|
57
|
+
get nameWithoutExt() {
|
|
58
|
+
return this.name.slice(0, -this.extname.length);
|
|
59
|
+
}
|
|
60
|
+
getContent() {
|
|
61
|
+
return readFile(this.file);
|
|
62
|
+
}
|
|
63
|
+
async getStream() {
|
|
64
|
+
return createReadStream(this.file);
|
|
65
|
+
}
|
|
66
|
+
static resolve(location) {
|
|
67
|
+
if (location.includes('*')) {
|
|
68
|
+
return globSync(location, { absolute: true, withFileTypes: false }).map(f => new FileSource(f));
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
return new FileSource(location);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=ContentSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContentSource.js","sourceRoot":"","sources":["../../src/ContentSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import micromatch from 'micromatch';
|
|
2
|
+
import { extname } from "path";
|
|
3
|
+
import { AbstractContentSource } from "./ContentSource.js";
|
|
4
|
+
import { loadTarIndex } from "./utils/tar.js";
|
|
5
|
+
export const MEMORY_METADATA_ENTRY = "metadata.json";
|
|
6
|
+
const EXPORT_CONTENT_KEY = '@content:';
|
|
7
|
+
const EXPORT_ENTRY_KEY = '@file:';
|
|
8
|
+
const EXPORT_PROPERTY_KEY = '@';
|
|
9
|
+
const mediaExtensions = new Set([".jpg", ".jpeg", ".png"]);
|
|
10
|
+
function applyProjection(projection, object) {
|
|
11
|
+
const keys = Object.keys(projection);
|
|
12
|
+
if (keys.length < 1) {
|
|
13
|
+
return object;
|
|
14
|
+
}
|
|
15
|
+
const isInclusion = !!projection[keys[0]];
|
|
16
|
+
const out = {};
|
|
17
|
+
if (isInclusion) {
|
|
18
|
+
for (const key of Object.keys(object)) {
|
|
19
|
+
if (projection[key]) {
|
|
20
|
+
out[key] = object[key];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
for (const key of Object.keys(object)) {
|
|
26
|
+
const value = projection[key];
|
|
27
|
+
if (value === undefined || value) {
|
|
28
|
+
out[key] = object[key];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
export class MemoryPack {
|
|
35
|
+
async exportObject(mapping) {
|
|
36
|
+
let metadata;
|
|
37
|
+
const result = {};
|
|
38
|
+
for (const key of Object.keys(mapping)) {
|
|
39
|
+
const value = mapping[key];
|
|
40
|
+
if (typeof value === 'string') {
|
|
41
|
+
if (value === '@') {
|
|
42
|
+
if (!metadata) {
|
|
43
|
+
metadata = await this.getMetadata();
|
|
44
|
+
}
|
|
45
|
+
if (key === '@') {
|
|
46
|
+
Object.assign(result, metadata);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
result[key] = metadata;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if (value.startsWith(EXPORT_CONTENT_KEY)) {
|
|
53
|
+
const selector = value.slice(EXPORT_CONTENT_KEY.length);
|
|
54
|
+
const isMulti = selector.includes('*') || selector.includes(',');
|
|
55
|
+
if (isMulti) {
|
|
56
|
+
result[key] = await this.getEntriesText(selector.split(','));
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
result[key] = await this.getEntryText(selector);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else if (value.startsWith(EXPORT_ENTRY_KEY)) {
|
|
63
|
+
const selector = value.slice(EXPORT_ENTRY_KEY.length);
|
|
64
|
+
const isMulti = selector.includes('*') || selector.includes(',');
|
|
65
|
+
if (isMulti) {
|
|
66
|
+
const entries = this.getEntries(selector.split(','));
|
|
67
|
+
result[key] = await Promise.all(entries.map(entry => entry.getText().then(content => ({ name: entry.name, content }))));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const entry = this.getEntry(selector);
|
|
71
|
+
result[key] = entry ? { name: entry.name, content: await entry.getText() } : null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else if (value.startsWith(EXPORT_PROPERTY_KEY)) {
|
|
75
|
+
if (!metadata) {
|
|
76
|
+
metadata = await this.getMetadata();
|
|
77
|
+
}
|
|
78
|
+
const accessor = value.substring(EXPORT_PROPERTY_KEY.length);
|
|
79
|
+
result[key] = resolveProperty(metadata, accessor);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
result[key] = value;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
result[key] = value;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export class MemoryEntry extends AbstractContentSource {
|
|
93
|
+
index;
|
|
94
|
+
name;
|
|
95
|
+
offset;
|
|
96
|
+
size;
|
|
97
|
+
constructor(index, name, offset, size) {
|
|
98
|
+
super();
|
|
99
|
+
this.index = index;
|
|
100
|
+
this.name = name;
|
|
101
|
+
this.offset = offset;
|
|
102
|
+
this.size = size;
|
|
103
|
+
}
|
|
104
|
+
getContent() {
|
|
105
|
+
return this.index.getContentAt(this.offset, this.size);
|
|
106
|
+
}
|
|
107
|
+
getText(encoding = "utf-8") {
|
|
108
|
+
return this.getContent().then((b) => b.toString(encoding));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
export class TarMemoryPack extends MemoryPack {
|
|
112
|
+
file;
|
|
113
|
+
index;
|
|
114
|
+
constructor(file, index) {
|
|
115
|
+
super();
|
|
116
|
+
this.file = file;
|
|
117
|
+
this.index = index;
|
|
118
|
+
if (!index.get(MEMORY_METADATA_ENTRY)) {
|
|
119
|
+
throw new Error("Invalid memory tar file. Context entry not found");
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async getMetadata(projection) {
|
|
123
|
+
const content = await this.index.getContent(MEMORY_METADATA_ENTRY);
|
|
124
|
+
if (content) {
|
|
125
|
+
let metadata = JSON.parse(content.toString('utf-8'));
|
|
126
|
+
if (projection) {
|
|
127
|
+
metadata = applyProjection(projection, metadata);
|
|
128
|
+
}
|
|
129
|
+
return metadata;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
throw new Error("Invalid memory tar file. Context entry not found");
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
getPaths(filters) {
|
|
136
|
+
let paths = this.index.getSortedPaths();
|
|
137
|
+
if (filters && filters.length > 0) {
|
|
138
|
+
paths = micromatch(paths, filters);
|
|
139
|
+
}
|
|
140
|
+
return paths;
|
|
141
|
+
}
|
|
142
|
+
getEntries(filters) {
|
|
143
|
+
return this._getEntries(this.getPaths(filters));
|
|
144
|
+
}
|
|
145
|
+
_getEntries(paths) {
|
|
146
|
+
const entries = [];
|
|
147
|
+
const index = this.index;
|
|
148
|
+
for (const path of paths) {
|
|
149
|
+
const entry = index.get(path);
|
|
150
|
+
entries.push(new MemoryEntry(index, path, entry.offset, entry.size));
|
|
151
|
+
}
|
|
152
|
+
return entries;
|
|
153
|
+
}
|
|
154
|
+
getEntriesContent(filters) {
|
|
155
|
+
const paths = this.getPaths(filters);
|
|
156
|
+
const promises = [];
|
|
157
|
+
for (const path of paths) {
|
|
158
|
+
promises.push(this.getEntryContent(path));
|
|
159
|
+
}
|
|
160
|
+
return Promise.all(promises);
|
|
161
|
+
}
|
|
162
|
+
getEntriesText(filters, encoding) {
|
|
163
|
+
const paths = this.getPaths(filters);
|
|
164
|
+
const promises = [];
|
|
165
|
+
for (const path of paths) {
|
|
166
|
+
promises.push(this.getEntryText(path, encoding));
|
|
167
|
+
}
|
|
168
|
+
return Promise.all(promises);
|
|
169
|
+
}
|
|
170
|
+
getEntry(path) {
|
|
171
|
+
const entry = this.index.get(path);
|
|
172
|
+
return entry ? new MemoryEntry(this.index, path, entry.offset, entry.size) : null;
|
|
173
|
+
}
|
|
174
|
+
getEntryContent(path) {
|
|
175
|
+
const entry = this.index.get(path);
|
|
176
|
+
if (!entry) {
|
|
177
|
+
return Promise.resolve(null);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
return this.index.getContentAt(entry.offset, entry.size);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
getEntryText(path, encoding) {
|
|
184
|
+
return this.getEntryContent(path).then((b) => b?.toString(encoding || getTextEncodingForPath(path)) || null);
|
|
185
|
+
}
|
|
186
|
+
static async loadFile(file) {
|
|
187
|
+
const index = await loadTarIndex(file);
|
|
188
|
+
if (!index) {
|
|
189
|
+
throw new Error("Invalid memory tar file. Cannot load index");
|
|
190
|
+
}
|
|
191
|
+
return new TarMemoryPack(file, index);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
export function loadMemoryPack(location) {
|
|
195
|
+
// TODO we only support file paths as location for now
|
|
196
|
+
return TarMemoryPack.loadFile(location);
|
|
197
|
+
}
|
|
198
|
+
function getTextEncodingForPath(path) {
|
|
199
|
+
const ext = extname(path);
|
|
200
|
+
return mediaExtensions.has(ext) ? "base64" : "utf-8";
|
|
201
|
+
}
|
|
202
|
+
function resolveProperty(obj, key) {
|
|
203
|
+
if (key.includes('.')) {
|
|
204
|
+
const keys = key.split('.');
|
|
205
|
+
let value = obj;
|
|
206
|
+
for (const k of keys) {
|
|
207
|
+
value = value[k];
|
|
208
|
+
if (value == undefined) {
|
|
209
|
+
return undefined;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return value;
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
return obj[key];
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=MemoryPack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryPack.js","sourceRoot":"","sources":["../../src/MemoryPack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { MEMORY_METADATA_ENTRY } from "./MemoryPack.js";
|
|
2
|
+
import { normalizePath, TarBuilder } from "./utils/tar.js";
|
|
3
|
+
export class MemoryPackBuilder {
|
|
4
|
+
builder;
|
|
5
|
+
baseMetadata = {};
|
|
6
|
+
entries = {};
|
|
7
|
+
constructor(builder) {
|
|
8
|
+
this.builder = builder;
|
|
9
|
+
}
|
|
10
|
+
async load(memory, options = {}) {
|
|
11
|
+
const files = options.files || [];
|
|
12
|
+
// do not fetch the context entry an the metadata.json file
|
|
13
|
+
files.push(`!${MEMORY_METADATA_ENTRY}`);
|
|
14
|
+
const entries = memory.getEntries(files);
|
|
15
|
+
for (const entry of entries) {
|
|
16
|
+
this.add(entry.name, entry);
|
|
17
|
+
}
|
|
18
|
+
this.baseMetadata = await memory.getMetadata(options.projection);
|
|
19
|
+
}
|
|
20
|
+
add(path, content) {
|
|
21
|
+
path = normalizePath(path);
|
|
22
|
+
this.entries[path] = content;
|
|
23
|
+
}
|
|
24
|
+
async build(file, metadata) {
|
|
25
|
+
metadata = { ...this.baseMetadata, ...metadata };
|
|
26
|
+
if (!file.endsWith('.tar')) {
|
|
27
|
+
file += '.tar';
|
|
28
|
+
}
|
|
29
|
+
if (this.builder.options.gzip) {
|
|
30
|
+
file += ".gz";
|
|
31
|
+
}
|
|
32
|
+
const tar = new TarBuilder(file);
|
|
33
|
+
const keys = Object.keys(this.entries).sort();
|
|
34
|
+
for (const key of keys) {
|
|
35
|
+
const source = this.entries[key];
|
|
36
|
+
tar.add(key, await source.getContent());
|
|
37
|
+
}
|
|
38
|
+
tar.add(MEMORY_METADATA_ENTRY, Buffer.from(JSON.stringify(metadata, undefined, this.builder.options.indent || undefined), "utf-8"));
|
|
39
|
+
await tar.build();
|
|
40
|
+
return file;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=MemoryPackBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryPackBuilder.js","sourceRoot":"","sources":["../../src/MemoryPackBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAoC,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAO3D,MAAM,OAAO,iBAAiB;IAIP;IAHnB,YAAY,GAAwB,EAAE,CAAC;IACvC,OAAO,GAAsC,EAAE,CAAC;IAEhD,YAAmB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IACnC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAkB,EAAE,UAAuB,EAAE;QACpD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAClC,2DAA2D;QAC3D,KAAK,CAAC,IAAI,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrE,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,OAAsB;QACpC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,QAAgB;QACtC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,QAAQ,EAAE,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,IAAI,IAAI,MAAM,CAAC;QACnB,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,IAAI,KAAK,CAAC;QAClB,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,CACtC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,EAC7E,OAAO,CAAC,CACX,CAAC;QACF,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
|