@hello.nrfcloud.com/proto-map 5.6.3 → 6.0.0
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/README.md +0 -16
- package/dist/generator/generateModels.js +0 -85
- package/dist/generator/models.js +1 -83
- package/dist/markdown/getCodeBlock.js +0 -26
- package/dist/models/check-model-rules.js +1 -91
- package/dist/models/models.js +5 -114
- package/dist/models/types.js +0 -12
- package/models/README.md +0 -4
- package/models/check-model-rules.ts +1 -90
- package/models/models.ts +1 -8
- package/models/types.ts +0 -16
- package/package.json +2 -3
- package/dist/generator/isDir.js +0 -163
- package/dist/generator/isDir.spec.js +0 -212
- package/dist/markdown/getFrontMatter.js +0 -15
- package/dist/models/asset_tracker_v2+AWS/examples/examples.spec.js +0 -489
- package/models/PCA20035+solar/README.md +0 -10
- package/models/PCA20035+solar/transforms/airQuality.md +0 -48
- package/models/PCA20035+solar/transforms/battery.md +0 -46
- package/models/PCA20035+solar/transforms/button.md +0 -45
- package/models/PCA20035+solar/transforms/deviceInfo.md +0 -72
- package/models/PCA20035+solar/transforms/gain.md +0 -45
- package/models/PCA20035+solar/transforms/geolocationFromGroundfix.md +0 -67
- package/models/PCA20035+solar/transforms/geolocationFromMessage.md +0 -80
- package/models/PCA20035+solar/transforms/humidity.md +0 -43
- package/models/PCA20035+solar/transforms/networkInfo.md +0 -84
- package/models/PCA20035+solar/transforms/pressure.md +0 -43
- package/models/PCA20035+solar/transforms/temperature.md +0 -43
- package/models/asset_tracker_v2+AWS/README.md +0 -6
- package/models/asset_tracker_v2+AWS/examples/examples.spec.ts +0 -229
- package/models/asset_tracker_v2+AWS/examples/shadow/example-1.json +0 -24
- package/models/asset_tracker_v2+AWS/examples/shadow/example-2.json +0 -30
- package/models/asset_tracker_v2+AWS/examples/shadow/example-3.json +0 -37
- package/models/asset_tracker_v2+AWS/examples/shadow/example-4.json +0 -48
- package/models/asset_tracker_v2+AWS/examples/shadow/example-5.json +0 -43
- package/models/asset_tracker_v2+AWS/transforms/GNSS.md +0 -66
- package/models/asset_tracker_v2+AWS/transforms/battery-voltage.md +0 -50
- package/models/asset_tracker_v2+AWS/transforms/device-info.md +0 -61
- package/models/asset_tracker_v2+AWS/transforms/env.md +0 -69
- package/models/asset_tracker_v2+AWS/transforms/fuel-gauge.md +0 -62
- package/models/asset_tracker_v2+AWS/transforms/roam.md +0 -100
- package/models/asset_tracker_v2+AWS/transforms/solar.md +0 -58
|
@@ -1,15 +1,8 @@
|
|
|
1
1
|
import chalk from 'chalk'
|
|
2
|
-
import jsonata from 'jsonata'
|
|
3
2
|
import assert from 'node:assert/strict'
|
|
4
3
|
import { readFile, readdir, stat } from 'node:fs/promises'
|
|
5
4
|
import path from 'node:path'
|
|
6
|
-
import {
|
|
7
|
-
import { senMLtoLwM2M } from '../senml/senMLtoLwM2M.js'
|
|
8
|
-
import { getCodeBlock } from '../markdown/getCodeBlock.js'
|
|
9
|
-
import { getFrontMatter } from '../markdown/getFrontMatter.js'
|
|
10
|
-
import { validateSenML } from '../senml/validateSenML.js'
|
|
11
|
-
import { isRegisteredLwM2MObject } from '../lwm2m/isRegisteredLwM2MObject.js'
|
|
12
|
-
import { hasValue } from '../senml/hasValue.js'
|
|
5
|
+
import { ModelIDRegExp } from './types.js'
|
|
13
6
|
import { parseREADME } from 'markdown/parseREADME.js'
|
|
14
7
|
|
|
15
8
|
console.log(chalk.gray('Models rules check'))
|
|
@@ -40,86 +33,4 @@ for (const model of await readdir(modelsDir)) {
|
|
|
40
33
|
throw new Error(`README is not valid for ${model}!`)
|
|
41
34
|
}
|
|
42
35
|
console.log(chalk.green('✔'), chalk.gray(`README.md is valid`))
|
|
43
|
-
|
|
44
|
-
// Validate jsonata expressions
|
|
45
|
-
let hasTransforms = false
|
|
46
|
-
const transformsFolder = path.join(modelDir, 'transforms')
|
|
47
|
-
try {
|
|
48
|
-
await stat(transformsFolder)
|
|
49
|
-
hasTransforms = true
|
|
50
|
-
console.log(' ', chalk.gray('Transforms:'))
|
|
51
|
-
} catch {
|
|
52
|
-
console.log(' ', chalk.gray('No transforms found.'))
|
|
53
|
-
}
|
|
54
|
-
if (hasTransforms) {
|
|
55
|
-
for (const transform of (await readdir(transformsFolder)).filter((f) =>
|
|
56
|
-
f.endsWith('.md'),
|
|
57
|
-
)) {
|
|
58
|
-
console.log(' ', chalk.white('·'), chalk.white.bold(transform))
|
|
59
|
-
const markdown = await readFile(
|
|
60
|
-
path.join(modelDir, 'transforms', transform),
|
|
61
|
-
'utf-8',
|
|
62
|
-
)
|
|
63
|
-
|
|
64
|
-
// Validate front-matter
|
|
65
|
-
const type = getFrontMatter(markdown, FrontMatter).type
|
|
66
|
-
console.log(' ', chalk.green('✔'), chalk.gray(`Type ${type} is valid`))
|
|
67
|
-
const findBlock = getCodeBlock(markdown)
|
|
68
|
-
const matchExpression = findBlock('jsonata', 'Match Expression')
|
|
69
|
-
const transformExpression = findBlock('jsonata', 'Transform Expression')
|
|
70
|
-
const inputExample = JSON.parse(findBlock('json', 'Input Example'))
|
|
71
|
-
const resultExample = JSON.parse(findBlock('json', 'Result Example'))
|
|
72
|
-
|
|
73
|
-
const selectResult = await jsonata(matchExpression).evaluate(inputExample)
|
|
74
|
-
if (selectResult !== true) {
|
|
75
|
-
throw new Error(
|
|
76
|
-
`The select expression did not evaluate to true with the given example.`,
|
|
77
|
-
)
|
|
78
|
-
}
|
|
79
|
-
console.log(
|
|
80
|
-
' ',
|
|
81
|
-
chalk.green('✔'),
|
|
82
|
-
chalk.gray('Select expression evaluated to true for the example input'),
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
const transformResult = await jsonata(
|
|
86
|
-
// For testing purposes this function call result is hardcoded
|
|
87
|
-
transformExpression.replace('$millis()', '1699999999999'),
|
|
88
|
-
).evaluate(inputExample)
|
|
89
|
-
|
|
90
|
-
const maybeValidSenML = validateSenML(transformResult.filter(hasValue))
|
|
91
|
-
if ('errors' in maybeValidSenML) {
|
|
92
|
-
console.error(maybeValidSenML.errors)
|
|
93
|
-
throw new Error('The JSONata expression must produce valid SenML')
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
assert.deepEqual(maybeValidSenML.value, resultExample)
|
|
97
|
-
console.log(
|
|
98
|
-
' ',
|
|
99
|
-
chalk.green('✔'),
|
|
100
|
-
chalk.gray('Transformation result is valid SenML'),
|
|
101
|
-
)
|
|
102
|
-
|
|
103
|
-
assert.deepEqual(maybeValidSenML.value, resultExample)
|
|
104
|
-
console.log(
|
|
105
|
-
' ',
|
|
106
|
-
chalk.green('✔'),
|
|
107
|
-
chalk.gray('The transformation result matches the example'),
|
|
108
|
-
)
|
|
109
|
-
|
|
110
|
-
// Validate
|
|
111
|
-
for (const object of senMLtoLwM2M(maybeValidSenML.value)) {
|
|
112
|
-
if (!isRegisteredLwM2MObject(object, console.error)) {
|
|
113
|
-
throw new Error(
|
|
114
|
-
'The LwM2M object must follow LwM2M schema definition',
|
|
115
|
-
)
|
|
116
|
-
}
|
|
117
|
-
console.log(
|
|
118
|
-
' ',
|
|
119
|
-
chalk.green('✔'),
|
|
120
|
-
chalk.gray('SenML object is valid LwM2M'),
|
|
121
|
-
)
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
36
|
}
|
package/models/models.ts
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { type Transform, TransformType } from "./types.js";
|
|
2
1
|
/**
|
|
3
2
|
* The Model IDs defined in this repo.
|
|
4
3
|
*/
|
|
5
4
|
export enum ModelID {
|
|
6
|
-
PCA20035_solar = "PCA20035+solar",
|
|
7
|
-
Asset_tracker_v2_AWS = "asset_tracker_v2+AWS",
|
|
8
5
|
Kartverket_vasstandsdata = "kartverket-vasstandsdata"
|
|
9
6
|
}
|
|
10
7
|
export type Model = {
|
|
@@ -12,10 +9,6 @@ export type Model = {
|
|
|
12
9
|
* The Model ID
|
|
13
10
|
*/
|
|
14
11
|
"id": ModelID;
|
|
15
|
-
/**
|
|
16
|
-
* The transforms defined for this model.
|
|
17
|
-
*/
|
|
18
|
-
"transforms": Array<Transform>;
|
|
19
12
|
/**
|
|
20
13
|
* Description of the Model from the README.md
|
|
21
14
|
*/
|
|
@@ -33,4 +26,4 @@ export type Model = {
|
|
|
33
26
|
/**
|
|
34
27
|
* The models defined for hello.nrfcloud.com
|
|
35
28
|
*/
|
|
36
|
-
export const models: Readonly<Record<ModelID, Model>> = { [ModelID.
|
|
29
|
+
export const models: Readonly<Record<ModelID, Model>> = { [ModelID.Kartverket_vasstandsdata]: { "id": ModelID.Kartverket_vasstandsdata, "about": { "title": "Kartverket Vasstandsdata", "description": "A simulated device reporting the current sea level as provided by the Kartverket's (Norwegian Mapping Authority) API for vasstandsdata (API for water level data).\nReports sea water level using the Object 14230.\nThe data is licensed by the Norwegian Mapping Authority\u2019s under the Creative Commons Attribution 4.0 International (CC BY 4.0) license." } } } as const;
|
package/models/types.ts
CHANGED
|
@@ -1,17 +1 @@
|
|
|
1
|
-
import { Type } from '@sinclair/typebox'
|
|
2
|
-
|
|
3
1
|
export const ModelIDRegExp = /^[A-Za-z0-9+_-]+$/
|
|
4
|
-
|
|
5
|
-
export enum TransformType {
|
|
6
|
-
Shadow = 'shadow',
|
|
7
|
-
Messages = 'messages',
|
|
8
|
-
}
|
|
9
|
-
export type Transform = {
|
|
10
|
-
type: TransformType
|
|
11
|
-
match: string
|
|
12
|
-
transform: string
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export const FrontMatter = Type.Object({
|
|
16
|
-
type: Type.Union([Type.Literal('shadow'), Type.Literal('messages')]),
|
|
17
|
-
})
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hello.nrfcloud.com/proto-map",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
4
|
"description": "Documents the communication protocol between devices, the hello.nrfcloud.com/map backend and web application",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -105,7 +105,6 @@
|
|
|
105
105
|
],
|
|
106
106
|
"peerDependencies": {
|
|
107
107
|
"@sinclair/typebox": "^0.32.22",
|
|
108
|
-
"ajv": "^8.12.0"
|
|
109
|
-
"jsonata": "^2.0.4"
|
|
108
|
+
"ajv": "^8.12.0"
|
|
110
109
|
}
|
|
111
110
|
}
|
package/dist/generator/isDir.js
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
2
|
-
try {
|
|
3
|
-
var info = gen[key](arg);
|
|
4
|
-
var value = info.value;
|
|
5
|
-
} catch (error) {
|
|
6
|
-
reject(error);
|
|
7
|
-
return;
|
|
8
|
-
}
|
|
9
|
-
if (info.done) {
|
|
10
|
-
resolve(value);
|
|
11
|
-
} else {
|
|
12
|
-
Promise.resolve(value).then(_next, _throw);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
function _async_to_generator(fn) {
|
|
16
|
-
return function() {
|
|
17
|
-
var self = this, args = arguments;
|
|
18
|
-
return new Promise(function(resolve, reject) {
|
|
19
|
-
var gen = fn.apply(self, args);
|
|
20
|
-
function _next(value) {
|
|
21
|
-
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
22
|
-
}
|
|
23
|
-
function _throw(err) {
|
|
24
|
-
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
25
|
-
}
|
|
26
|
-
_next(undefined);
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
function _ts_generator(thisArg, body) {
|
|
31
|
-
var f, y, t, g, _ = {
|
|
32
|
-
label: 0,
|
|
33
|
-
sent: function() {
|
|
34
|
-
if (t[0] & 1) throw t[1];
|
|
35
|
-
return t[1];
|
|
36
|
-
},
|
|
37
|
-
trys: [],
|
|
38
|
-
ops: []
|
|
39
|
-
};
|
|
40
|
-
return g = {
|
|
41
|
-
next: verb(0),
|
|
42
|
-
"throw": verb(1),
|
|
43
|
-
"return": verb(2)
|
|
44
|
-
}, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
|
|
45
|
-
return this;
|
|
46
|
-
}), g;
|
|
47
|
-
function verb(n) {
|
|
48
|
-
return function(v) {
|
|
49
|
-
return step([
|
|
50
|
-
n,
|
|
51
|
-
v
|
|
52
|
-
]);
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
function step(op) {
|
|
56
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
57
|
-
while(_)try {
|
|
58
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
59
|
-
if (y = 0, t) op = [
|
|
60
|
-
op[0] & 2,
|
|
61
|
-
t.value
|
|
62
|
-
];
|
|
63
|
-
switch(op[0]){
|
|
64
|
-
case 0:
|
|
65
|
-
case 1:
|
|
66
|
-
t = op;
|
|
67
|
-
break;
|
|
68
|
-
case 4:
|
|
69
|
-
_.label++;
|
|
70
|
-
return {
|
|
71
|
-
value: op[1],
|
|
72
|
-
done: false
|
|
73
|
-
};
|
|
74
|
-
case 5:
|
|
75
|
-
_.label++;
|
|
76
|
-
y = op[1];
|
|
77
|
-
op = [
|
|
78
|
-
0
|
|
79
|
-
];
|
|
80
|
-
continue;
|
|
81
|
-
case 7:
|
|
82
|
-
op = _.ops.pop();
|
|
83
|
-
_.trys.pop();
|
|
84
|
-
continue;
|
|
85
|
-
default:
|
|
86
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
87
|
-
_ = 0;
|
|
88
|
-
continue;
|
|
89
|
-
}
|
|
90
|
-
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
91
|
-
_.label = op[1];
|
|
92
|
-
break;
|
|
93
|
-
}
|
|
94
|
-
if (op[0] === 6 && _.label < t[1]) {
|
|
95
|
-
_.label = t[1];
|
|
96
|
-
t = op;
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
if (t && _.label < t[2]) {
|
|
100
|
-
_.label = t[2];
|
|
101
|
-
_.ops.push(op);
|
|
102
|
-
break;
|
|
103
|
-
}
|
|
104
|
-
if (t[2]) _.ops.pop();
|
|
105
|
-
_.trys.pop();
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
op = body.call(thisArg, _);
|
|
109
|
-
} catch (e) {
|
|
110
|
-
op = [
|
|
111
|
-
6,
|
|
112
|
-
e
|
|
113
|
-
];
|
|
114
|
-
y = 0;
|
|
115
|
-
} finally{
|
|
116
|
-
f = t = 0;
|
|
117
|
-
}
|
|
118
|
-
if (op[0] & 5) throw op[1];
|
|
119
|
-
return {
|
|
120
|
-
value: op[0] ? op[1] : void 0,
|
|
121
|
-
done: true
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
import { stat } from 'node:fs/promises';
|
|
126
|
-
export var isDir = function() {
|
|
127
|
-
var _ref = _async_to_generator(function(path) {
|
|
128
|
-
var e;
|
|
129
|
-
return _ts_generator(this, function(_state) {
|
|
130
|
-
switch(_state.label){
|
|
131
|
-
case 0:
|
|
132
|
-
_state.trys.push([
|
|
133
|
-
0,
|
|
134
|
-
2,
|
|
135
|
-
,
|
|
136
|
-
3
|
|
137
|
-
]);
|
|
138
|
-
return [
|
|
139
|
-
4,
|
|
140
|
-
stat(path)
|
|
141
|
-
];
|
|
142
|
-
case 1:
|
|
143
|
-
return [
|
|
144
|
-
2,
|
|
145
|
-
_state.sent().isDirectory()
|
|
146
|
-
];
|
|
147
|
-
case 2:
|
|
148
|
-
e = _state.sent();
|
|
149
|
-
return [
|
|
150
|
-
2,
|
|
151
|
-
false
|
|
152
|
-
];
|
|
153
|
-
case 3:
|
|
154
|
-
return [
|
|
155
|
-
2
|
|
156
|
-
];
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
return function isDir(path) {
|
|
161
|
-
return _ref.apply(this, arguments);
|
|
162
|
-
};
|
|
163
|
-
}();
|
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
2
|
-
try {
|
|
3
|
-
var info = gen[key](arg);
|
|
4
|
-
var value = info.value;
|
|
5
|
-
} catch (error) {
|
|
6
|
-
reject(error);
|
|
7
|
-
return;
|
|
8
|
-
}
|
|
9
|
-
if (info.done) {
|
|
10
|
-
resolve(value);
|
|
11
|
-
} else {
|
|
12
|
-
Promise.resolve(value).then(_next, _throw);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
function _async_to_generator(fn) {
|
|
16
|
-
return function() {
|
|
17
|
-
var self = this, args = arguments;
|
|
18
|
-
return new Promise(function(resolve, reject) {
|
|
19
|
-
var gen = fn.apply(self, args);
|
|
20
|
-
function _next(value) {
|
|
21
|
-
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
22
|
-
}
|
|
23
|
-
function _throw(err) {
|
|
24
|
-
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
25
|
-
}
|
|
26
|
-
_next(undefined);
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
function _ts_generator(thisArg, body) {
|
|
31
|
-
var f, y, t, g, _ = {
|
|
32
|
-
label: 0,
|
|
33
|
-
sent: function() {
|
|
34
|
-
if (t[0] & 1) throw t[1];
|
|
35
|
-
return t[1];
|
|
36
|
-
},
|
|
37
|
-
trys: [],
|
|
38
|
-
ops: []
|
|
39
|
-
};
|
|
40
|
-
return g = {
|
|
41
|
-
next: verb(0),
|
|
42
|
-
"throw": verb(1),
|
|
43
|
-
"return": verb(2)
|
|
44
|
-
}, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
|
|
45
|
-
return this;
|
|
46
|
-
}), g;
|
|
47
|
-
function verb(n) {
|
|
48
|
-
return function(v) {
|
|
49
|
-
return step([
|
|
50
|
-
n,
|
|
51
|
-
v
|
|
52
|
-
]);
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
function step(op) {
|
|
56
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
57
|
-
while(_)try {
|
|
58
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
59
|
-
if (y = 0, t) op = [
|
|
60
|
-
op[0] & 2,
|
|
61
|
-
t.value
|
|
62
|
-
];
|
|
63
|
-
switch(op[0]){
|
|
64
|
-
case 0:
|
|
65
|
-
case 1:
|
|
66
|
-
t = op;
|
|
67
|
-
break;
|
|
68
|
-
case 4:
|
|
69
|
-
_.label++;
|
|
70
|
-
return {
|
|
71
|
-
value: op[1],
|
|
72
|
-
done: false
|
|
73
|
-
};
|
|
74
|
-
case 5:
|
|
75
|
-
_.label++;
|
|
76
|
-
y = op[1];
|
|
77
|
-
op = [
|
|
78
|
-
0
|
|
79
|
-
];
|
|
80
|
-
continue;
|
|
81
|
-
case 7:
|
|
82
|
-
op = _.ops.pop();
|
|
83
|
-
_.trys.pop();
|
|
84
|
-
continue;
|
|
85
|
-
default:
|
|
86
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
87
|
-
_ = 0;
|
|
88
|
-
continue;
|
|
89
|
-
}
|
|
90
|
-
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
91
|
-
_.label = op[1];
|
|
92
|
-
break;
|
|
93
|
-
}
|
|
94
|
-
if (op[0] === 6 && _.label < t[1]) {
|
|
95
|
-
_.label = t[1];
|
|
96
|
-
t = op;
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
if (t && _.label < t[2]) {
|
|
100
|
-
_.label = t[2];
|
|
101
|
-
_.ops.push(op);
|
|
102
|
-
break;
|
|
103
|
-
}
|
|
104
|
-
if (t[2]) _.ops.pop();
|
|
105
|
-
_.trys.pop();
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
op = body.call(thisArg, _);
|
|
109
|
-
} catch (e) {
|
|
110
|
-
op = [
|
|
111
|
-
6,
|
|
112
|
-
e
|
|
113
|
-
];
|
|
114
|
-
y = 0;
|
|
115
|
-
} finally{
|
|
116
|
-
f = t = 0;
|
|
117
|
-
}
|
|
118
|
-
if (op[0] & 5) throw op[1];
|
|
119
|
-
return {
|
|
120
|
-
value: op[0] ? op[1] : void 0,
|
|
121
|
-
done: true
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
import { isDir } from './isDir.js';
|
|
126
|
-
import { describe, it, before } from 'node:test';
|
|
127
|
-
import assert from 'node:assert/strict';
|
|
128
|
-
import os from 'node:os';
|
|
129
|
-
import { mkdtemp } from 'node:fs/promises';
|
|
130
|
-
import path from 'node:path';
|
|
131
|
-
void describe('isDir()', function() {
|
|
132
|
-
var dir;
|
|
133
|
-
void before(/*#__PURE__*/ _async_to_generator(function() {
|
|
134
|
-
return _ts_generator(this, function(_state) {
|
|
135
|
-
switch(_state.label){
|
|
136
|
-
case 0:
|
|
137
|
-
return [
|
|
138
|
-
4,
|
|
139
|
-
mkdtemp(path.join(os.tmpdir(), 'isdir-'))
|
|
140
|
-
];
|
|
141
|
-
case 1:
|
|
142
|
-
dir = _state.sent();
|
|
143
|
-
return [
|
|
144
|
-
2
|
|
145
|
-
];
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
}));
|
|
149
|
-
void it('should return true if the path is a directory', /*#__PURE__*/ _async_to_generator(function() {
|
|
150
|
-
var _;
|
|
151
|
-
return _ts_generator(this, function(_state) {
|
|
152
|
-
switch(_state.label){
|
|
153
|
-
case 0:
|
|
154
|
-
_ = assert.strictEqual;
|
|
155
|
-
return [
|
|
156
|
-
4,
|
|
157
|
-
isDir(dir)
|
|
158
|
-
];
|
|
159
|
-
case 1:
|
|
160
|
-
return [
|
|
161
|
-
2,
|
|
162
|
-
_.apply(assert, [
|
|
163
|
-
_state.sent(),
|
|
164
|
-
true
|
|
165
|
-
])
|
|
166
|
-
];
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
}));
|
|
170
|
-
void it('should return false if the path is not a directory', /*#__PURE__*/ _async_to_generator(function() {
|
|
171
|
-
var _;
|
|
172
|
-
return _ts_generator(this, function(_state) {
|
|
173
|
-
switch(_state.label){
|
|
174
|
-
case 0:
|
|
175
|
-
_ = assert.strictEqual;
|
|
176
|
-
return [
|
|
177
|
-
4,
|
|
178
|
-
isDir(path.join(dir, 'foo.txt'))
|
|
179
|
-
];
|
|
180
|
-
case 1:
|
|
181
|
-
return [
|
|
182
|
-
2,
|
|
183
|
-
_.apply(assert, [
|
|
184
|
-
_state.sent(),
|
|
185
|
-
false
|
|
186
|
-
])
|
|
187
|
-
];
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
}));
|
|
191
|
-
void it('should return false if an error occurs', /*#__PURE__*/ _async_to_generator(function() {
|
|
192
|
-
var _;
|
|
193
|
-
return _ts_generator(this, function(_state) {
|
|
194
|
-
switch(_state.label){
|
|
195
|
-
case 0:
|
|
196
|
-
_ = assert.strictEqual;
|
|
197
|
-
return [
|
|
198
|
-
4,
|
|
199
|
-
isDir(path.join(dir, 'foo'))
|
|
200
|
-
];
|
|
201
|
-
case 1:
|
|
202
|
-
return [
|
|
203
|
-
2,
|
|
204
|
-
_.apply(assert, [
|
|
205
|
-
_state.sent(),
|
|
206
|
-
false
|
|
207
|
-
])
|
|
208
|
-
];
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
}));
|
|
212
|
-
});
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { remark } from 'remark';
|
|
2
|
-
import frontmatter from 'remark-frontmatter';
|
|
3
|
-
import { validate } from '../validate.js';
|
|
4
|
-
import yaml from 'yaml';
|
|
5
|
-
export var getFrontMatter = function(markdown, schema) {
|
|
6
|
-
var data = yaml.parse(remark().use(frontmatter, [
|
|
7
|
-
'yaml'
|
|
8
|
-
]).parse(markdown).children[0].value);
|
|
9
|
-
var maybeValid = validate(schema)(data);
|
|
10
|
-
if ('errors' in maybeValid) {
|
|
11
|
-
console.error(maybeValid.errors);
|
|
12
|
-
throw new Error("Frontmatter is not valid!");
|
|
13
|
-
}
|
|
14
|
-
return maybeValid.value;
|
|
15
|
-
};
|