Merge pull request #4733 from dbolack-ab/v4Metadata

V4 metadata - Initial
This commit is contained in:
Víctor Losada Hernández
2026-08-21 19:03:23 +02:00
committed by GitHub
5 changed files with 286 additions and 72 deletions
-16
View File
@@ -10862,22 +10862,6 @@
"url": "https://opencollective.com/mongoose" "url": "https://opencollective.com/mongoose"
} }
}, },
"node_modules/mongoose/node_modules/gcp-metadata": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-7.0.1.tgz",
"integrity": "sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ==",
"license": "Apache-2.0",
"optional": true,
"peer": true,
"dependencies": {
"gaxios": "^7.0.0",
"google-logging-utils": "^1.0.0",
"json-bigint": "^1.0.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/mongoose/node_modules/mongodb": { "node_modules/mongoose/node_modules/mongodb": {
"version": "7.5.0", "version": "7.5.0",
"license": "Apache-2.0", "license": "Apache-2.0",
+26 -20
View File
@@ -2,26 +2,32 @@ import _ from 'lodash';
// Default properties for newly-created brews // Default properties for newly-created brews
const DEFAULT_BREW = { const DEFAULT_BREW = {
title : '', title : '',
text : '', text : '',
style : undefined, style : undefined,
description : '', description : '',
editId : undefined, editId : undefined,
shareId : undefined, shareId : undefined,
createdAt : undefined, createdAt : undefined,
updatedAt : undefined, updatedAt : undefined,
renderer : 'V3', renderer : 'V3',
theme : '5ePHB', theme : '5ePHB',
authors : [], authors : [],
tags : [], tags : [],
lang : 'en', lang : 'en',
thumbnail : '', thumbnail : '',
views : 0, views : 0,
published : false, published : false,
pageCount : 1, pageCount : 1,
gDrive : false, gDrive : false,
trashed : false trashed : false,
bleedSize : { top: '.125in', bottom: '.125in', inner: '.125in', outer: '.125in' },
safetySpace : { top: '.25in', bottom: '.25in', outer: '.25in', inner: '.5in' },
trimSize : { width: '8.5in', height: '11in' },
columns : '2',
columnGutter : '.125in',
license : 'None',
legalAuthors : ''
}; };
// Default values for older brews with missing properties // Default values for older brews with missing properties
// e.g., missing "renderer" is assumed to be "legacy" // e.g., missing "renderer" is assumed to be "legacy"
+8
View File
@@ -218,6 +218,14 @@ const api = {
const metadata = _.pick(brew, ['title', 'description', 'tags', 'renderer', 'theme']); const metadata = _.pick(brew, ['title', 'description', 'tags', 'renderer', 'theme']);
const snippetsArray = brewSnippetsToJSON('brew_snippets', brew.snippets, null, false).snippets; const snippetsArray = brewSnippetsToJSON('brew_snippets', brew.snippets, null, false).snippets;
metadata.snippets = snippetsArray.length > 0 ? snippetsArray : undefined; metadata.snippets = snippetsArray.length > 0 ? snippetsArray : undefined;
metadata.bleedSize = { top: brew?.bleedSize?.top, bottom: brew?.bleedSize?.bottom, inner: brew?.bleedSize?.inner, outer: brew?.bleedSize?.outer };
metadata.safetySpace = { top: brew?.safetySpace?.top, bottom: brew?.safetySpace?.bottom, outer: brew?.safetySpace?.outer, inner: brew?.safetySpace?.inner };
metadata.trimSize = { width: brew?.trimSize?.width, height: brew?.trimSize?.height };
metadata.columns = brew?.columns;
metadata.columnGutter = brew?.columnGutter;
metadata.license = brew?.license;
metadata.legalAuthors = brew?.legalAuthors;
text = `\`\`\`metadata\n` + text = `\`\`\`metadata\n` +
`${yaml.dump(metadata)}\n` + `${yaml.dump(metadata)}\n` +
`\`\`\`\n\n` + `\`\`\`\n\n` +
+243 -36
View File
@@ -359,7 +359,27 @@ describe('Tests for api', ()=>{
style : undefined, style : undefined,
trashed : false, trashed : false,
updatedAt : undefined, updatedAt : undefined,
views : 0 views : 0,
bleedSize: {
top: '.125in',
bottom: '.125in',
inner: '.125in',
outer: '.125in',
},
columns: '2',
columnGutter: '.125in',
legalAuthors: '',
license: 'None',
safetySpace: {
top: '.25in',
bottom: '.25in',
outer: '.25in',
inner: '.5in',
},
trimSize: {
width: '8.5in',
height: '11in',
},
}); });
expect(next).toHaveBeenCalled(); expect(next).toHaveBeenCalled();
expect(api.getId).toHaveBeenCalledWith(req); expect(api.getId).toHaveBeenCalledWith(req);
@@ -450,7 +470,27 @@ describe('Tests for api', ()=>{
tags : ['something', 'fun'], tags : ['something', 'fun'],
renderer : 'v3', renderer : 'v3',
theme : 'phb', theme : 'phb',
googleId : '12345' googleId : '12345',
bleedSize: {
top: '.125in',
bottom: '.125in',
inner: '.125in',
outer: '.125in',
},
columns: '2',
columnGutter: '.125in',
legalAuthors: '',
license: 'None',
safetySpace: {
top: '.25in',
bottom: '.25in',
outer: '.25in',
inner: '.5in',
},
trimSize: {
width: '8.5in',
height: '11in',
},
}); });
expect(result).toEqual(`\`\`\`metadata expect(result).toEqual(`\`\`\`metadata
@@ -461,6 +501,23 @@ tags:
- fun - fun
renderer: v3 renderer: v3
theme: phb theme: phb
bleedSize:
top: .125in
bottom: .125in
inner: .125in
outer: .125in
safetySpace:
top: .25in
bottom: .25in
outer: .25in
inner: .5in
trimSize:
width: 8.5in
height: 11in
columns: '2'
columnGutter: .125in
license: None
legalAuthors: ''
\`\`\` \`\`\`
@@ -476,7 +533,27 @@ brew`);
tags : ['something', 'fun'], tags : ['something', 'fun'],
renderer : 'v3', renderer : 'v3',
theme : 'phb', theme : 'phb',
googleId : '12345' googleId : '12345',
bleedSize: {
top: '.125in',
bottom: '.125in',
inner: '.125in',
outer: '.125in',
},
columns: '2',
columnGutter: '.125in',
legalAuthors: '',
license: 'None',
safetySpace: {
top: '.25in',
bottom: '.25in',
outer: '.25in',
inner: '.5in',
},
trimSize: {
width: '8.5in',
height: '11in',
},
}); });
expect(result).toEqual(`\`\`\`metadata expect(result).toEqual(`\`\`\`metadata
@@ -487,6 +564,23 @@ tags:
- fun - fun
renderer: v3 renderer: v3
theme: phb theme: phb
bleedSize:
top: .125in
bottom: .125in
inner: .125in
outer: .125in
safetySpace:
top: .25in
bottom: .25in
outer: .25in
inner: .5in
trimSize:
width: 8.5in
height: 11in
columns: '2'
columnGutter: .125in
license: None
legalAuthors: ''
\`\`\` \`\`\`
@@ -593,16 +687,16 @@ brew`);
expect(res.status).toHaveBeenCalledWith(200); expect(res.status).toHaveBeenCalledWith(200);
expect(res.send).toHaveBeenCalledWith({ expect(res.send).toHaveBeenCalledWith({
_id : '1', _id : '1',
authors : ['test user'], authors : ['test user'],
createdAt : undefined, createdAt : undefined,
description : '', description : '',
editId : expect.any(String), editId : expect.any(String),
gDrive : false, gDrive : false,
pageCount : 1, pageCount : 1,
published : false, published : false,
renderer : 'V3', renderer : 'V3',
lang : 'en', lang : 'en',
shareId : expect.any(String), shareId : expect.any(String),
style : undefined, style : undefined,
tags : [], tags : [],
@@ -613,7 +707,27 @@ brew`);
title : 'asdf', title : 'asdf',
trashed : false, trashed : false,
updatedAt : undefined, updatedAt : undefined,
views : 0 views : 0,
bleedSize: {
top: '.125in',
bottom: '.125in',
inner: '.125in',
outer: '.125in',
},
columns: '2',
columnGutter: '.125in',
legalAuthors: '',
license: 'None',
safetySpace: {
top: '.25in',
bottom: '.25in',
outer: '.25in',
inner: '.5in',
},
trimSize: {
width: '8.5in',
height: '11in',
},
}); });
}); });
@@ -651,28 +765,48 @@ brew`);
expect(google.newGoogleBrew).toHaveBeenCalled(); expect(google.newGoogleBrew).toHaveBeenCalled();
expect(res.status).toHaveBeenCalledWith(200); expect(res.status).toHaveBeenCalledWith(200);
expect(res.send).toHaveBeenCalledWith({ expect(res.send).toHaveBeenCalledWith({
_id : '1', _id : '1',
authors : ['test user'], authors : ['test user'],
createdAt : undefined, bleedSize: {
description : '', top: '.125in',
editId : expect.any(String), bottom: '.125in',
gDrive : false, inner: '.125in',
pageCount : 1, outer: '.125in',
published : false, },
renderer : 'V3', columns: '2',
lang : 'en', columnGutter: '.125in',
shareId : expect.any(String), createdAt : undefined,
googleId : expect.any(String), description : '',
style : undefined, editId : expect.any(String),
tags : [], gDrive : false,
text : undefined, pageCount : 1,
textBin : undefined, published : false,
theme : '5ePHB', renderer : 'V3',
thumbnail : '', lang : 'en',
title : 'asdf', shareId : expect.any(String),
trashed : false, legalAuthors: '',
updatedAt : undefined, license: 'None',
views : 0 safetySpace: {
top: '.25in',
bottom: '.25in',
outer: '.25in',
inner: '.5in',
},
googleId : expect.any(String),
style : undefined,
tags : [],
text : undefined,
textBin : undefined,
theme : '5ePHB',
thumbnail : '',
title : 'asdf',
trashed : false,
trimSize: {
width: '8.5in',
height: '11in',
},
updatedAt : undefined,
views : 0
}); });
}); });
}); });
@@ -1164,6 +1298,79 @@ brew`);
// Text // Text
expect(testBrew.text).toEqual('text\n'); expect(testBrew.text).toEqual('text\n');
}); });
it('extended metadata', async ()=>{
const testBrew = {
text : '```metadata\n' +
'title: title\n' +
'description: description\n' +
'tags: [ \'tag a\' , \'tag b\' ]\n' +
'renderer: legacy\n' +
'theme: 5ePHB\n' +
'lang: en\n' +
'bleedSize:\n' +
' top: 1.5in\n' +
' bottom: 1.5in\n' +
' outer: 1.5in\n' +
' inner: 1.5in\n' +
'safetySpace:\n' +
' top: 1.25in\n' +
' bottom: 1.25in\n' +
' outer: 1.25in\n' +
' inner: 1.5in\n' +
'trimSize:\n' +
' width: 18.5in\n' +
' height: 111in\n' +
'columns: 12\n' +
'columnGutter: 1.125in\n' +
'license: AELF\n' +
'legalAuthors: Tom Bombadil\n' +
'\n' +
'```\n' +
'\n' +
'```css\n' +
'style\n' +
'style\n' +
'style\n' +
'```\n' +
'\n' +
'text\n'
};
splitTextStyleAndMetadata(testBrew);
// Metadata
expect(testBrew.title).toEqual('title');
expect(testBrew.description).toEqual('description');
expect(testBrew.renderer).toEqual('legacy');
expect(testBrew.theme).toEqual('5ePHB');
expect(testBrew.lang).toEqual('en');
// Paper Specfications
expect(testBrew.bleedSize.top).toEqual('1.5in');
expect(testBrew.bleedSize.bottom).toEqual('1.5in');
expect(testBrew.bleedSize.inner).toEqual('1.5in');
expect(testBrew.bleedSize.outer).toEqual('1.5in');
expect(testBrew.safetySpace.top).toEqual('1.25in');
expect(testBrew.safetySpace.bottom).toEqual('1.25in');
expect(testBrew.safetySpace.inner).toEqual('1.5in');
expect(testBrew.safetySpace.outer).toEqual('1.25in');
expect(testBrew.trimSize.width).toEqual('18.5in');
expect(testBrew.trimSize.height).toEqual('111in');
expect(testBrew.columns).toEqual(12);
expect(testBrew.columnGutter).toEqual('1.125in');
// Extended Metadata
expect(testBrew.license).toEqual('AELF');
expect(testBrew.legalAuthors).toEqual('Tom Bombadil');
// Style
expect(testBrew.style).toEqual('style\nstyle\nstyle\n');
// Text
expect(testBrew.text).toEqual('text\n');
});
}); });
}); });
+9
View File
@@ -93,6 +93,15 @@ const splitTextStyleAndMetadata = (brew)=>{
const metadata = yaml.load(metadataSection); const metadata = yaml.load(metadataSection);
Object.assign(brew, _.pick(metadata, ['title', 'description', 'renderer', 'theme', 'lang'])); Object.assign(brew, _.pick(metadata, ['title', 'description', 'renderer', 'theme', 'lang']));
brew.snippets = yamlSnippetsToText(_.pick(metadata, ['snippets']).snippets || ''); brew.snippets = yamlSnippetsToText(_.pick(metadata, ['snippets']).snippets || '');
brew.bleedSize = { ...metadata.bleedSize };
brew.safetySpace = { ...metadata.safetySpace };
brew.trimSize = { ...metadata.trimSize };
brew.columns = metadata?.columns;
brew.columnGutter = metadata?.columnGutter;
brew.license = metadata?.license;
brew.legalAuthors = metadata.legalAuthors;
brew.text = brew.text.slice(index + 6); brew.text = brew.text.slice(index + 6);
} }
if(brew.text.startsWith('```css')) { if(brew.text.startsWith('```css')) {