manyfest 1.0.16 → 1.0.18
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/.browserslistrc +1 -0
- package/.browserslistrc_compatible +1 -0
- package/.browserslistrc_default +1 -0
- package/gulpfile-config.json +11 -0
- package/gulpfile-config_compatible.json +11 -0
- package/gulpfile-config_default.json +11 -0
- package/gulpfile.js +117 -15
- package/package.json +16 -12
- package/source/Manyfest-HashTranslation.js +1 -1
- package/test/Manyfest_Embedded_Solvers_tests.js +2 -2
- package/test/Manyfest_Object_Delete_tests.js +2 -2
- package/test/Manyfest_Object_HashTranslation_tests.js +8 -8
- package/test/Manyfest_Object_Populate_tests.js +2 -2
- package/test/Manyfest_Object_ReadSets_tests.js +1 -0
- package/test/Manyfest_Object_Read_tests.js +2 -2
- package/test/Manyfest_Object_SchemaManipulation_tests.js +11 -11
- package/test/Manyfest_Object_Validate_tests.js +1 -1
package/.browserslistrc
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
> 0.01%
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
> 0.01%
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
since 2018
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"EntrypointInputSourceFile": "./source/Manyfest-Browser-Shim.js",
|
|
3
|
+
|
|
4
|
+
"LibraryObjectName": "Manyfest",
|
|
5
|
+
|
|
6
|
+
"LibraryOutputFolder": "./dist/",
|
|
7
|
+
|
|
8
|
+
"LibraryUniminifiedFileName": "manyfest.compatible.js",
|
|
9
|
+
|
|
10
|
+
"LibraryMinifiedFileName": "manyfest.compatible.min.js"
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"EntrypointInputSourceFile": "./source/Manyfest-Browser-Shim.js",
|
|
3
|
+
|
|
4
|
+
"LibraryObjectName": "Manyfest",
|
|
5
|
+
|
|
6
|
+
"LibraryOutputFolder": "./dist/",
|
|
7
|
+
|
|
8
|
+
"LibraryUniminifiedFileName": "manyfest.compatible.js",
|
|
9
|
+
|
|
10
|
+
"LibraryMinifiedFileName": "manyfest.compatible.min.js"
|
|
11
|
+
}
|
package/gulpfile.js
CHANGED
|
@@ -1,62 +1,164 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
/*
|
|
4
|
+
After hours of reading and trying various ways of using gulp-env, environment variables
|
|
5
|
+
and babel browesrslistrc / package.json environments it is clear that the state of using
|
|
6
|
+
these tools is a mess. There are ways of getting it to work but none of them feel like
|
|
7
|
+
they will work well in the long term (all of the examples seem to be in bands of about
|
|
8
|
+
a year or two of working before the pattern changes entirely).
|
|
9
|
+
|
|
10
|
+
WHY did we need such a crazy compatible version? wkhtmltopdf is why. It uses a very
|
|
11
|
+
old incompatible version of the QT browser.
|
|
12
|
+
|
|
13
|
+
Therefore, we will use a very old and simple method.
|
|
14
|
+
|
|
15
|
+
1) There is a config file (gulpfile-config.json), documented here, describing the inputs and outputs for the build operation.
|
|
16
|
+
|
|
17
|
+
const _CONFIG = (
|
|
18
|
+
{
|
|
19
|
+
// The input source file that should be passed to browserify:
|
|
20
|
+
// (if you need to auto-instantiate an object, for instance)
|
|
21
|
+
EntrypointInputSourceFile: `${__dirname}/source/Fable-Browser-Shim.js`,
|
|
22
|
+
|
|
23
|
+
// The name of the packaged object to be passed to browserify:
|
|
24
|
+
// (browserify sets this to global scope and window.SOMEOBJECTNAMEHERE where SOMEOBJECTNAMEHERE is the string below)
|
|
25
|
+
LibraryObjectName: `Fable`,
|
|
26
|
+
|
|
27
|
+
// The folder to write the library files and maps out to:
|
|
28
|
+
LibraryOutputFolder: `${__dirname}/dist/`,
|
|
29
|
+
|
|
30
|
+
// The name of the unminified version of the packaged library, for easy debugging:
|
|
31
|
+
LibraryUniminifiedFileName: `fable.js`,
|
|
32
|
+
|
|
33
|
+
// The name of the minified version of the packaged library, for production release:
|
|
34
|
+
LibraryMinifiedFileName: `fable.min.js`
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
2) We are using a .browserslistrc file... this is what tells gulp-babel, through the
|
|
38
|
+
magic of the @babel/preset-env library, how to transpile the library into a compatible
|
|
39
|
+
enough format for our targets.
|
|
40
|
+
|
|
41
|
+
For example as of writing this, there are two targets we want:
|
|
42
|
+
|
|
43
|
+
* Modern browsers in the last five years, expressed as a .browserslistrc with the string "since 2018"
|
|
44
|
+
* Very old janky browsers expressed as a .browserslistrc with the string "> 0.01%"
|
|
45
|
+
... which is interpreted as anything more than 0.01% of browsers in existence or something like that
|
|
46
|
+
|
|
47
|
+
3) Because we want multiple outputs, and, the tools do fine if we want one output but some of
|
|
48
|
+
the toolchain doesn't like making different targets well, we're just going to have multiple
|
|
49
|
+
configurations and .browserslistrc files. So if our spec above says we need a ".browserslistrc"
|
|
50
|
+
file and a "gulpfile-config.json", we're going to make the following two sets of configuration:
|
|
51
|
+
|
|
52
|
+
* .browserslistrc_default, .gulpfile-config_default.json
|
|
53
|
+
* .browserslistrc_compatible, .gulpfile-config_compatible.json
|
|
54
|
+
|
|
55
|
+
4) We will copy, synchronously, these files to where the rest of our toolchain expects
|
|
56
|
+
them, before we begin the build. This will be done by looking at the GULP_CUSTOM_BUILD_TARGET
|
|
57
|
+
environment variable. This allows us to create new targets to experiment by copying a couple files,
|
|
58
|
+
jimmying the settings and setting an environment variable before running the pipeline.
|
|
59
|
+
|
|
60
|
+
5) We will run the toolchain and it will happily think it's just doing a single build and kinda work.
|
|
61
|
+
|
|
62
|
+
*/
|
|
63
|
+
// BEGINNING OF STEP 3 and STEP 4 ABOVE
|
|
64
|
+
const libFS = require('fs');
|
|
65
|
+
const _GULP_CUSTOM_BUILD_TARGET = (typeof(process.env.GULP_CUSTOM_BUILD_TARGET) == 'undefined') ? 'default' : process.env.GULP_CUSTOM_BUILD_TARGET;
|
|
66
|
+
console.log(`--> Gulp custom build target set to: [${_GULP_CUSTOM_BUILD_TARGET}]`);
|
|
67
|
+
const _GULP_CONFIG = `./gulpfile-config_${_GULP_CUSTOM_BUILD_TARGET}.json`;
|
|
68
|
+
const _GULP_CONFIG_TARGET = `./gulpfile-config.json`;
|
|
69
|
+
console.log(` : Environment set gulp config [${_GULP_CONFIG}] will be copied to [${_GULP_CONFIG_TARGET}]`);
|
|
70
|
+
if (!libFS.existsSync(`./${_GULP_CONFIG}`))
|
|
71
|
+
{
|
|
72
|
+
console.log(`!!!> Enviromnent set gulp config doesn't exist!`);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
else
|
|
76
|
+
{
|
|
77
|
+
libFS.copyFileSync(_GULP_CONFIG, _GULP_CONFIG_TARGET);
|
|
78
|
+
console.log(` > Environment Gulp Config copied`);
|
|
79
|
+
}
|
|
80
|
+
const _BROWSERSLISTRC = `./.browserslistrc_${_GULP_CUSTOM_BUILD_TARGET}`;
|
|
81
|
+
const _BROWSERSLISTRC_TARGET = `./.browserslistrc`;
|
|
82
|
+
console.log(` : Environment set browserslistrc [${_BROWSERSLISTRC}] will be copied to [${_BROWSERSLISTRC_TARGET}]`);
|
|
83
|
+
if (!libFS.existsSync(`./${_GULP_CONFIG}`))
|
|
84
|
+
{
|
|
85
|
+
console.log(`!!!> Enviromnent set browserslistrc doesn't exist!`);
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
else
|
|
89
|
+
{
|
|
90
|
+
libFS.copyFileSync(_BROWSERSLISTRC, _BROWSERSLISTRC_TARGET);
|
|
91
|
+
console.log(` > Environment Gulp Config copied`);
|
|
92
|
+
}
|
|
93
|
+
console.log(`---> The browserslistrc compatibility set is: ${libFS.readFileSync(_BROWSERSLISTRC_TARGET, 'utf8')}`);
|
|
94
|
+
// END OF STEP 3 and STEP 4 ABOVE
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
// ---> Now load the config and get on with building <--- \\
|
|
98
|
+
console.log(``);
|
|
99
|
+
console.log(`---> Loading the gulp config...`);
|
|
100
|
+
const _CONFIG = require('./gulpfile-config.json');
|
|
101
|
+
console.log(` > Building to [${_CONFIG.LibraryUniminifiedFileName}] and [${_CONFIG.LibraryMinifiedFileName}]`)
|
|
102
|
+
|
|
103
|
+
// ---> Boilerplate Browser Uglification and Packaging <--- \\
|
|
104
|
+
console.log(``);
|
|
105
|
+
console.log(`--> Gulp is taking over!`);
|
|
106
|
+
|
|
3
107
|
const libBrowserify = require('browserify');
|
|
4
108
|
const libGulp = require('gulp');
|
|
5
109
|
|
|
6
110
|
const libVinylSourceStream = require('vinyl-source-stream');
|
|
7
111
|
const libVinylBuffer = require('vinyl-buffer');
|
|
8
112
|
|
|
9
|
-
const libTerser = require('gulp-terser');
|
|
10
|
-
const libBuble = require('gulp-buble');
|
|
11
113
|
const libSourcemaps = require('gulp-sourcemaps');
|
|
12
114
|
const libGulpUtil = require('gulp-util');
|
|
115
|
+
const libBabel = require('gulp-babel');
|
|
116
|
+
const libTerser = require('gulp-terser');
|
|
13
117
|
|
|
14
118
|
// Build the module for the browser
|
|
15
|
-
// This gulp task is taken from the gulp recipe repository:
|
|
16
|
-
// https://github.com/gulpjs/gulp/blob/master/docs/recipes/browserify-uglify-sourcemap.md
|
|
17
119
|
libGulp.task('minified',
|
|
18
120
|
() => {
|
|
19
121
|
// set up the custom browserify instance for this task
|
|
20
122
|
var tmpBrowserify = libBrowserify(
|
|
21
123
|
{
|
|
22
|
-
entries:
|
|
23
|
-
standalone:
|
|
124
|
+
entries: _CONFIG.EntrypointInputSourceFile,
|
|
125
|
+
standalone: _CONFIG.LibraryObjectName,
|
|
24
126
|
debug: true
|
|
25
127
|
});
|
|
26
128
|
|
|
27
129
|
return tmpBrowserify.bundle()
|
|
28
|
-
.pipe(libVinylSourceStream(
|
|
130
|
+
.pipe(libVinylSourceStream(_CONFIG.LibraryMinifiedFileName))
|
|
29
131
|
.pipe(libVinylBuffer())
|
|
30
132
|
.pipe(libSourcemaps.init({loadMaps: true}))
|
|
31
133
|
// Add transformation tasks to the pipeline here.
|
|
134
|
+
.pipe(libBabel())
|
|
32
135
|
.pipe(libTerser())
|
|
33
136
|
.on('error', libGulpUtil.log)
|
|
34
137
|
.pipe(libSourcemaps.write('./'))
|
|
35
|
-
.pipe(libGulp.dest(
|
|
138
|
+
.pipe(libGulp.dest(_CONFIG.LibraryOutputFolder));
|
|
36
139
|
});
|
|
37
140
|
|
|
38
141
|
// Build the module for the browser
|
|
39
|
-
// This gulp task is taken from the gulp recipe repository:
|
|
40
|
-
// https://github.com/gulpjs/gulp/blob/master/docs/recipes/browserify-uglify-sourcemap.md
|
|
41
142
|
libGulp.task('debug',
|
|
42
143
|
() => {
|
|
43
144
|
// set up the custom browserify instance for this task
|
|
44
145
|
var tmpBrowserify = libBrowserify(
|
|
45
146
|
{
|
|
46
|
-
entries:
|
|
47
|
-
standalone:
|
|
147
|
+
entries: _CONFIG.EntrypointInputSourceFile,
|
|
148
|
+
standalone: _CONFIG.LibraryObjectName,
|
|
48
149
|
debug: true
|
|
49
150
|
});
|
|
50
151
|
|
|
51
152
|
return tmpBrowserify.bundle()
|
|
52
|
-
.pipe(libVinylSourceStream(
|
|
153
|
+
.pipe(libVinylSourceStream(_CONFIG.LibraryUniminifiedFileName))
|
|
53
154
|
.pipe(libVinylBuffer())
|
|
155
|
+
.pipe(libBabel())
|
|
54
156
|
.on('error', libGulpUtil.log)
|
|
55
|
-
.pipe(libGulp.dest(
|
|
157
|
+
.pipe(libGulp.dest(_CONFIG.LibraryOutputFolder));
|
|
56
158
|
});
|
|
57
159
|
|
|
58
160
|
libGulp.task
|
|
59
161
|
(
|
|
60
162
|
'build',
|
|
61
163
|
libGulp.series('debug', 'minified')
|
|
62
|
-
);
|
|
164
|
+
);
|
package/package.json
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "manyfest",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.18",
|
|
4
4
|
"description": "JSON Object Manifest for Data Description and Parsing",
|
|
5
5
|
"main": "source/Manyfest.js",
|
|
6
6
|
"scripts": {
|
|
7
|
+
"start": "node source/Manyfest.js",
|
|
7
8
|
"docker-dev-build-image": "docker build ./ -f Dockerfile_LUXURYCode -t retold/manyfest:local",
|
|
8
9
|
"docker-dev-run": "docker run -it -d --name manyfest -p 12340:8080 -v \"$PWD/.config:/home/coder/.config\" -v \"$PWD:/home/coder/manyfest\" -u \"$(id -u):$(id -g)\" -e \"DOCKER_USER=$USER\" retold/manyfest:local",
|
|
9
10
|
"test": "./node_modules/mocha/bin/_mocha -u tdd -R spec",
|
|
10
11
|
"tests": "./node_modules/mocha/bin/_mocha -u tdd -R spec --grep",
|
|
11
|
-
"coverage": "nyc npm run test && nyc report --reporter=lcov"
|
|
12
|
+
"coverage": "nyc npm run test && nyc report --reporter=lcov",
|
|
13
|
+
"build": "./node_modules/.bin/gulp build",
|
|
14
|
+
"build-compatible": "GULP_CUSTOM_BUILD_TARGET=compatible ./node_modules/.bin/gulp build"
|
|
12
15
|
},
|
|
13
16
|
"repository": {
|
|
14
17
|
"type": "git",
|
|
@@ -39,28 +42,29 @@
|
|
|
39
42
|
]
|
|
40
43
|
},
|
|
41
44
|
"devDependencies": {
|
|
42
|
-
"@babel/core": "^7.
|
|
43
|
-
"@babel/preset-env": "^7.
|
|
44
|
-
"@testing-library/dom": "^
|
|
45
|
-
"async": "^3.2.
|
|
45
|
+
"@babel/core": "^7.21.5",
|
|
46
|
+
"@babel/preset-env": "^7.21.5",
|
|
47
|
+
"@testing-library/dom": "^9.2.0",
|
|
48
|
+
"async": "^3.2.4",
|
|
46
49
|
"browserify": "^17.0.0",
|
|
47
|
-
"chai": "4.3.
|
|
50
|
+
"chai": "4.3.7",
|
|
48
51
|
"gulp": "^4.0.2",
|
|
49
52
|
"gulp-babel": "^8.0.0",
|
|
50
53
|
"gulp-buble": "^0.9.0",
|
|
54
|
+
"gulp-env": "^0.4.0",
|
|
51
55
|
"gulp-sourcemaps": "^3.0.0",
|
|
52
56
|
"gulp-terser": "^2.1.0",
|
|
53
57
|
"gulp-util": "^3.0.8",
|
|
54
|
-
"jsdom": "^
|
|
55
|
-
"mocha": "
|
|
56
|
-
"npm-check-updates": "^
|
|
58
|
+
"jsdom": "^21.1.1",
|
|
59
|
+
"mocha": "10.2.0",
|
|
60
|
+
"npm-check-updates": "^16.10.9",
|
|
57
61
|
"nyc": "^15.1.0",
|
|
58
62
|
"vinyl-buffer": "^1.0.1",
|
|
59
63
|
"vinyl-source-stream": "^2.0.0"
|
|
60
64
|
},
|
|
61
65
|
"dependencies": {
|
|
62
|
-
"elucidator": "^1.0.
|
|
63
|
-
"precedent": "^1.0.
|
|
66
|
+
"elucidator": "^1.0.7",
|
|
67
|
+
"precedent": "^1.0.9"
|
|
64
68
|
},
|
|
65
69
|
"author": "steven velozo <steven@velozo.com>",
|
|
66
70
|
"license": "MIT",
|
|
@@ -7,7 +7,7 @@ let libSimpleLog = require('./Manyfest-LogToConsole.js');
|
|
|
7
7
|
/**
|
|
8
8
|
* Hash Translation
|
|
9
9
|
*
|
|
10
|
-
* This is a very simple translation table for hashes, which allows the same schema to resolve
|
|
10
|
+
* This is a very simple translation table for hashes, which allows the same schema to resolve
|
|
11
11
|
* differently based on a loaded translation table.
|
|
12
12
|
*
|
|
13
13
|
* This is to prevent the requirement for mutating schemas over and over again when we want to
|
|
@@ -80,7 +80,7 @@ suite
|
|
|
80
80
|
},
|
|
81
81
|
Solvers:
|
|
82
82
|
{
|
|
83
|
-
'ThumbnailFilesOnly':
|
|
83
|
+
'ThumbnailFilesOnly':
|
|
84
84
|
{
|
|
85
85
|
"Description":
|
|
86
86
|
{
|
|
@@ -94,7 +94,7 @@ suite
|
|
|
94
94
|
"Namespace": "Logic",
|
|
95
95
|
"Instruction": "if",
|
|
96
96
|
|
|
97
|
-
"InputHashAddressMap":
|
|
97
|
+
"InputHashAddressMap":
|
|
98
98
|
{
|
|
99
99
|
"leftValue": "Record.format",
|
|
100
100
|
"rightValue": "SolutionState.Config.SearchTerm",
|
|
@@ -67,7 +67,7 @@ suite
|
|
|
67
67
|
"IDAnimal": { "Name":"Database ID", "Description":"The unique integer-based database identifier for an Animal record.", "DataType":"Integer" },
|
|
68
68
|
"Name": { "Description":"The animal's colloquial species name (e.g. Rabbit, Dog, Bear, Mongoose)." },
|
|
69
69
|
"Type": { "Description":"Whether or not the animal is wild, domesticated, agricultural, in a research lab or a part of a zoo.." },
|
|
70
|
-
"MedicalStats":
|
|
70
|
+
"MedicalStats":
|
|
71
71
|
{
|
|
72
72
|
"Name":"Medical Statistics", "Description":"Basic medical statistics for this animal"
|
|
73
73
|
},
|
|
@@ -89,7 +89,7 @@ suite
|
|
|
89
89
|
|
|
90
90
|
fTestComplete();
|
|
91
91
|
}
|
|
92
|
-
);
|
|
92
|
+
);
|
|
93
93
|
}
|
|
94
94
|
);
|
|
95
95
|
}
|
|
@@ -45,7 +45,7 @@ suite
|
|
|
45
45
|
tmpCreator = _Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Director');
|
|
46
46
|
Expect(tmpCreator)
|
|
47
47
|
.to.equal('General Mills');
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
fTestComplete();
|
|
50
50
|
}
|
|
51
51
|
);
|
|
@@ -67,7 +67,7 @@ suite
|
|
|
67
67
|
Expect(_Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Director')).to.equal('General Mills');
|
|
68
68
|
// And Author!
|
|
69
69
|
Expect(_Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Author')).to.equal('General Mills');
|
|
70
|
-
|
|
70
|
+
|
|
71
71
|
fTestComplete();
|
|
72
72
|
}
|
|
73
73
|
);
|
|
@@ -91,7 +91,7 @@ suite
|
|
|
91
91
|
_Manyfest.hashTranslations.removeTranslation('Director');
|
|
92
92
|
Expect(_Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Author')).to.equal('General Mills');
|
|
93
93
|
Expect(_Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Director')).to.equal(undefined);
|
|
94
|
-
|
|
94
|
+
|
|
95
95
|
fTestComplete();
|
|
96
96
|
}
|
|
97
97
|
);
|
|
@@ -116,7 +116,7 @@ suite
|
|
|
116
116
|
Expect(_Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Author')).to.equal(undefined);
|
|
117
117
|
Expect(_Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Director')).to.equal(undefined);
|
|
118
118
|
Expect(_Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Songwriter')).to.equal('General Mills');
|
|
119
|
-
|
|
119
|
+
|
|
120
120
|
fTestComplete();
|
|
121
121
|
}
|
|
122
122
|
);
|
|
@@ -142,7 +142,7 @@ suite
|
|
|
142
142
|
Expect(_Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Director')).to.equal(undefined);
|
|
143
143
|
Expect(_Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Songwriter')).to.equal(undefined);
|
|
144
144
|
Expect(_Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Creator')).to.equal('General Mills');
|
|
145
|
-
|
|
145
|
+
|
|
146
146
|
fTestComplete();
|
|
147
147
|
}
|
|
148
148
|
);
|
|
@@ -152,13 +152,13 @@ suite
|
|
|
152
152
|
(fTestComplete)=>
|
|
153
153
|
{
|
|
154
154
|
let _Manyfest = new libManyfest({ Scope:'Archive.org', Descriptors: {'metadata.creator': {Name:'Creator', Hash:'Creator'}}});
|
|
155
|
-
// Create a translation between "Creator" and "metadata.identifier", which isn't in the manifest in any way
|
|
155
|
+
// Create a translation between "Creator" and "metadata.identifier", which isn't in the manifest in any way
|
|
156
156
|
_Manyfest.hashTranslations.addTranslation({"Creator":"metadata.identifier"});
|
|
157
157
|
// This address is not in the descriptor address list or the hash list
|
|
158
158
|
Expect(_Manyfest.getValueAtAddress(_SampleDataArchiveOrgFrankenberry, 'metadata.identifier')).to.equal('FrankenberryCountChoculaTevevisionCommercial1971');
|
|
159
159
|
// But now we've pointed the Creator hash to it!
|
|
160
160
|
Expect(_Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Creator')).to.equal('FrankenberryCountChoculaTevevisionCommercial1971');
|
|
161
|
-
|
|
161
|
+
|
|
162
162
|
fTestComplete();
|
|
163
163
|
}
|
|
164
164
|
);
|
|
@@ -172,7 +172,7 @@ suite
|
|
|
172
172
|
Expect(_Manyfest.hashTranslations.addTranslation('THIS SHOULD BE AN OBJECT')).to.equal(false);
|
|
173
173
|
|
|
174
174
|
Expect(_Manyfest.hashTranslations.translationCount()).to.equal(0);
|
|
175
|
-
|
|
175
|
+
|
|
176
176
|
fTestComplete();
|
|
177
177
|
}
|
|
178
178
|
);
|
|
@@ -42,6 +42,7 @@ suite
|
|
|
42
42
|
});
|
|
43
43
|
let tmpFileSet = _Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'FileSet');
|
|
44
44
|
Expect(Array.isArray(tmpFileSet)).to.equal(true);
|
|
45
|
+
let tmpFileSizes = _Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'FileSizes');
|
|
45
46
|
fTestComplete();
|
|
46
47
|
}
|
|
47
48
|
);
|
|
@@ -68,7 +68,7 @@ suite
|
|
|
68
68
|
"IDAnimal": { "Name":"Database ID", "Description":"The unique integer-based database identifier for an Animal record.", "DataType":"Integer" },
|
|
69
69
|
"Name": { "Description":"The animal's colloquial species name (e.g. Rabbit, Dog, Bear, Mongoose)." },
|
|
70
70
|
"Type": { "Description":"Whether or not the animal is wild, domesticated, agricultural, in a research lab or a part of a zoo.." },
|
|
71
|
-
"MedicalStats":
|
|
71
|
+
"MedicalStats":
|
|
72
72
|
{
|
|
73
73
|
"Name":"Medical Statistics", "Description":"Basic medical statistics for this animal"
|
|
74
74
|
},
|
|
@@ -95,7 +95,7 @@ suite
|
|
|
95
95
|
|
|
96
96
|
fTestComplete();
|
|
97
97
|
}
|
|
98
|
-
);
|
|
98
|
+
);
|
|
99
99
|
}
|
|
100
100
|
);
|
|
101
101
|
suite
|
|
@@ -41,7 +41,7 @@ suite
|
|
|
41
41
|
"a": "CarrotCost",
|
|
42
42
|
"b": "AppleCost"
|
|
43
43
|
});
|
|
44
|
-
|
|
44
|
+
|
|
45
45
|
Expect(tmpSchemaDescriptors.a.Hash).to.equal('a');
|
|
46
46
|
|
|
47
47
|
let _Manyfest = new libManyfest();
|
|
@@ -71,7 +71,7 @@ suite
|
|
|
71
71
|
"a": "CarrotCost",
|
|
72
72
|
"b": "AppleCost"
|
|
73
73
|
});
|
|
74
|
-
|
|
74
|
+
|
|
75
75
|
Expect(tmpSchemaDescriptors.a.Hash).to.equal('a');
|
|
76
76
|
|
|
77
77
|
let _Manyfest = new libManyfest();
|
|
@@ -97,7 +97,7 @@ suite
|
|
|
97
97
|
"a": { "Hash": "a", "Type": "Number" },
|
|
98
98
|
"b": { "Hash": "b", "Type": "Number" }
|
|
99
99
|
});
|
|
100
|
-
|
|
100
|
+
|
|
101
101
|
let tmpSchemaDescriptorsToMerge = (
|
|
102
102
|
{
|
|
103
103
|
"c": { "Hash": "c" },
|
|
@@ -105,7 +105,7 @@ suite
|
|
|
105
105
|
"e": { "Hash": "e" },
|
|
106
106
|
"a": { "Hash": "ARBUCKLE", "Type": "Number" }
|
|
107
107
|
});
|
|
108
|
-
|
|
108
|
+
|
|
109
109
|
Expect(tmpSchemaDescriptors.a.Hash).to.equal('a');
|
|
110
110
|
|
|
111
111
|
let _Manyfest = new libManyfest();
|
|
@@ -137,14 +137,14 @@ suite
|
|
|
137
137
|
"a": "CarrotCost",
|
|
138
138
|
"b": "AppleCost"
|
|
139
139
|
});
|
|
140
|
-
|
|
140
|
+
|
|
141
141
|
let _Manyfest = new libManyfest({ Scope:'Archive.org', Descriptors: {'metadata.creator': {Name:'Creator', Hash:'Creator'}}});
|
|
142
142
|
// Property not schema, accessed by hash:
|
|
143
143
|
let tmpCreator = _Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Creator');
|
|
144
144
|
Expect(tmpCreator).to.equal('General Mills');
|
|
145
145
|
let _ClonedManyfest = _Manyfest.clone();
|
|
146
146
|
Expect(_ClonedManyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Creator')).to.equal('General Mills');
|
|
147
|
-
|
|
147
|
+
|
|
148
148
|
fTestComplete();
|
|
149
149
|
}
|
|
150
150
|
);
|
|
@@ -164,7 +164,7 @@ suite
|
|
|
164
164
|
"a": "CarrotCost",
|
|
165
165
|
"b": "AppleCost"
|
|
166
166
|
});
|
|
167
|
-
|
|
167
|
+
|
|
168
168
|
let _Manyfest = new libManyfest({ Scope:'Archive.org', Descriptors: {'metadata.creator': {Name:'Creator', Hash:'Creator'}}});
|
|
169
169
|
// Property not schema, accessed by hash:
|
|
170
170
|
let tmpCreator = _Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Creator');
|
|
@@ -193,7 +193,7 @@ suite
|
|
|
193
193
|
_ClonedManyfest.hashTranslations.addTranslation({"Director":"Creator", "Author":"Creator", "Songwriter":"Creator"});
|
|
194
194
|
Expect(_ClonedManyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Director')).to.equal('General Mills');
|
|
195
195
|
Expect(_Manyfest.getValueByHash(_SampleDataArchiveOrgFrankenberry, 'Director')).to.equal(undefined);
|
|
196
|
-
|
|
196
|
+
|
|
197
197
|
fTestComplete();
|
|
198
198
|
}
|
|
199
199
|
);
|
|
@@ -213,7 +213,7 @@ suite
|
|
|
213
213
|
"c": null
|
|
214
214
|
}
|
|
215
215
|
});
|
|
216
|
-
|
|
216
|
+
|
|
217
217
|
let _Manyfest = new libManyfest();
|
|
218
218
|
// Now remap the schema (in-place)
|
|
219
219
|
let tmpSchemaPrototype = _Manyfest.objectAddressGeneration.generateAddressses(tmpSchemaDescriptors);
|
|
@@ -230,7 +230,7 @@ suite
|
|
|
230
230
|
(
|
|
231
231
|
'Make a much bigger schema prototype.',
|
|
232
232
|
(fTestComplete)=>
|
|
233
|
-
{
|
|
233
|
+
{
|
|
234
234
|
let _Manyfest = new libManyfest();
|
|
235
235
|
// Now remap the schema (in-place)
|
|
236
236
|
let tmpSchemaPrototype = _Manyfest.objectAddressGeneration.generateAddressses(_SampleDataArchiveOrgFrankenberry);
|
|
@@ -257,7 +257,7 @@ suite
|
|
|
257
257
|
"IDAnimal": { "Name":"Database ID", "Description":"The unique integer-based database identifier for an Animal record.", "DataType":"Integer" },
|
|
258
258
|
"Name": { "Description":"The animal's colloquial species name (e.g. Rabbit, Dog, Bear, Mongoose)." },
|
|
259
259
|
"Type": { "Description":"Whether or not the animal is wild, domesticated, agricultural, in a research lab or a part of a zoo.." },
|
|
260
|
-
"MedicalStats":
|
|
260
|
+
"MedicalStats":
|
|
261
261
|
{
|
|
262
262
|
"Name":"Medical Statistics", "Description":"Basic medical statistics for this animal"
|
|
263
263
|
},
|