-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathschema.js
More file actions
70 lines (60 loc) · 1.85 KB
/
schema.js
File metadata and controls
70 lines (60 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import fs from 'fs';
import path from 'path';
import _ from 'lodash';
import async from 'async';
import { mkdirp } from 'mkdirp';
import {
loadExtensionJsonCallback,
saveExtensionJsonCallback,
ensureInExtensionDir,
} from '../services/extension';
import { load } from '../services/template';
import msg from '../user_messages';
export function saveSchemaToExtJson(schemaName, callback) {
async.waterfall(
[
loadExtensionJsonCallback,
(extension, done) => {
/* eslint no-param-reassign: 0 */
const names = _.get(extension, 'dataSchemas', []).map(s => s.name);
if (_.includes(names, schemaName)) {
done(new Error(msg.schema.add.alreadyExists(schemaName)));
} else {
done(null, extension);
}
},
(extension, done) => {
const schema = {
name: schemaName,
// extension.json should specify all paths with forward slashes regardless of OS:
path: `server/data-schemas/${schemaName}.json`,
};
if (extension.dataSchemas) extension.dataSchemas.push(schema);
else extension.dataSchemas = [schema];
saveExtensionJsonCallback(extension, done);
},
],
callback,
);
}
export function createSchema(schemaName, callback) {
const root = ensureInExtensionDir();
let schemaPath;
async.series(
[
done => saveSchemaToExtJson(schemaName, done),
done => mkdirp(path.join(root, 'server', 'data-schemas'), done),
done => {
const template = load('./schema/schema.json.template', { schemaName });
schemaPath = path.join(
root,
'server',
'data-schemas',
`${schemaName}.json`,
);
fs.writeFile(schemaPath, template, 'utf8', done);
},
],
err => callback(err, schemaPath ? path.relative(root, schemaPath) : null),
);
}