Skip to content

Commit d105fdd

Browse files
Merge pull request #75 from MichalPawlicki/DPR-522-support-sb1
Support SB1 project files
2 parents b8eafc4 + 6a3429e commit d105fdd

File tree

8 files changed

+266
-6
lines changed

8 files changed

+266
-6
lines changed

lib/index.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
const parser = require('scratch-parser');
22

3+
const {SB1Analyzer} = require('./sb1');
34
const sb2 = require('./sb2');
45
const sb3 = require('./sb3');
56

67
module.exports = function (buffer, callback) {
78
parser(buffer, false, (err, result) => {
8-
if (err) return callback(err);
9+
if (err === 'Parser only supports Scratch 2.X and above') {
10+
return new SB1Analyzer().analyze(buffer, callback);
11+
} else if (err) {
12+
return callback(err);
13+
}
914

1015
// Extract the project object from the parser results
1116
const project = result[0];

lib/sb1.js

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
const scratchParserValidate = require('scratch-parser/lib/validate');
2+
const {SB1File} = require('scratch-sb1-converter');
3+
4+
const sb2 = require('./sb2');
5+
6+
/**
7+
* SB1Analyzer class for analyzing SB1 projects.
8+
*/
9+
class SB1Analyzer {
10+
/**
11+
* Creates a new SB1Analyzer instance.
12+
* @param {Function} validate - The validate function to use.
13+
*/
14+
constructor (validate = scratchParserValidate) {
15+
this.validate = validate;
16+
}
17+
18+
/**
19+
* Converts an SB1 project buffer to an SB2 project object,
20+
* validates it using the provided validate function,
21+
* analyzes it, and returns summary information about the project.
22+
* @param {Buffer} buffer Project buffer (SB1 format)
23+
* @param {Function} callback Callback function
24+
* @return {void}
25+
*/
26+
analyze (buffer, callback) {
27+
try {
28+
const sb1File = new SB1File(buffer);
29+
const project = sb1File.json;
30+
31+
this.validate(false, project, (err, validatedProject) => {
32+
if (err) {
33+
return callback(err);
34+
}
35+
36+
validatedProject.isBundle = true;
37+
validatedProject.projectVersion = 1;
38+
return sb2(validatedProject, callback);
39+
});
40+
} catch (err) {
41+
return callback(err);
42+
}
43+
}
44+
}
45+
46+
module.exports = {SB1Analyzer};

lib/sb2.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ module.exports = function (project, callback) {
247247
comments: extract(project, 'scriptComments'),
248248
sounds: extract(project, 'sounds', 'soundName', 'md5'),
249249
costumes: extract(project, 'costumes', 'costumeName', 'baseLayerMD5'),
250-
projectVersion: 2,
250+
projectVersion: project.projectVersion,
251251
isBundle: project.isBundle
252252
};
253253

lib/sb3.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ module.exports = function (project, callback) {
191191
blocks: blocks(project.targets),
192192
extensions: extensions(project.extensions),
193193
meta: metadata(project.meta),
194-
projectVersion: 3,
194+
projectVersion: project.projectVersion,
195195
isBundle: project.isBundle
196196
};
197197

package-lock.json

+79-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"author": "Scratch Foundation",
1616
"license": "BSD-3-Clause",
1717
"dependencies": {
18-
"scratch-parser": "5.0.0"
18+
"scratch-parser": "5.0.0",
19+
"scratch-sb1-converter": "2.0.50"
1920
},
2021
"devDependencies": {
2122
"@babel/eslint-parser": "^7.5.4",
58.5 KB
Binary file not shown.

0 commit comments

Comments
 (0)