@es-joy/jsoe 0.16.0 → 0.17.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/.ncurc.cjs +4 -5
- package/CHANGES.md +4 -0
- package/README.md +27 -3
- package/badges/licenses-badge.svg +1 -0
- package/dist/formatAndTypeChoices.d.ts +39 -19
- package/dist/formatAndTypeChoices.d.ts.map +1 -1
- package/dist/formats/indexedDBKey.d.ts +1 -1
- package/dist/formats/indexedDBKey.d.ts.map +1 -1
- package/dist/formats/json.d.ts +1 -1
- package/dist/formats/json.d.ts.map +1 -1
- package/dist/formats/schema.d.ts +11 -0
- package/dist/formats/schema.d.ts.map +1 -0
- package/dist/formats/structuredCloning.d.ts +11 -13
- package/dist/formats/structuredCloning.d.ts.map +1 -1
- package/dist/formats.d.ts +86 -25
- package/dist/formats.d.ts.map +1 -1
- package/dist/fundamentalTypes/BooleanObjectType.d.ts +1 -1
- package/dist/fundamentalTypes/BooleanObjectType.d.ts.map +1 -1
- package/dist/fundamentalTypes/NumberObjectType.d.ts +1 -1
- package/dist/fundamentalTypes/NumberObjectType.d.ts.map +1 -1
- package/dist/fundamentalTypes/StringObjectType.d.ts +1 -1
- package/dist/fundamentalTypes/StringObjectType.d.ts.map +1 -1
- package/dist/fundamentalTypes/arrayReferenceType.d.ts +1 -1
- package/dist/fundamentalTypes/arrayType.d.ts +3 -3
- package/dist/fundamentalTypes/arrayType.d.ts.map +1 -1
- package/dist/fundamentalTypes/bigintObjectType.d.ts +6 -0
- package/dist/fundamentalTypes/bigintObjectType.d.ts.map +1 -0
- package/dist/fundamentalTypes/bigintType.d.ts +1 -1
- package/dist/fundamentalTypes/bigintType.d.ts.map +1 -1
- package/dist/fundamentalTypes/blobType.d.ts +1 -1
- package/dist/fundamentalTypes/blobType.d.ts.map +1 -1
- package/dist/fundamentalTypes/booleanType.d.ts +8 -0
- package/dist/fundamentalTypes/booleanType.d.ts.map +1 -0
- package/dist/fundamentalTypes/catchType.d.ts +6 -0
- package/dist/fundamentalTypes/catchType.d.ts.map +1 -0
- package/dist/fundamentalTypes/dateType.d.ts +4 -4
- package/dist/fundamentalTypes/dateType.d.ts.map +1 -1
- package/dist/fundamentalTypes/domexceptionType.d.ts +1 -1
- package/dist/fundamentalTypes/domexceptionType.d.ts.map +1 -1
- package/dist/fundamentalTypes/enumType.d.ts +6 -0
- package/dist/fundamentalTypes/enumType.d.ts.map +1 -0
- package/dist/fundamentalTypes/errorType.d.ts +1 -1
- package/dist/fundamentalTypes/errorType.d.ts.map +1 -1
- package/dist/fundamentalTypes/fileType.d.ts +1 -1
- package/dist/fundamentalTypes/fileType.d.ts.map +1 -1
- package/dist/fundamentalTypes/filelistType.d.ts +1 -1
- package/dist/fundamentalTypes/filelistType.d.ts.map +1 -1
- package/dist/fundamentalTypes/functionType.d.ts +6 -0
- package/dist/fundamentalTypes/functionType.d.ts.map +1 -0
- package/dist/fundamentalTypes/literalType.d.ts +6 -0
- package/dist/fundamentalTypes/literalType.d.ts.map +1 -0
- package/dist/fundamentalTypes/mapType.d.ts +1 -1
- package/dist/fundamentalTypes/mapType.d.ts.map +1 -1
- package/dist/fundamentalTypes/nanType.d.ts +6 -0
- package/dist/fundamentalTypes/nanType.d.ts.map +1 -0
- package/dist/fundamentalTypes/nativeEnumType.d.ts +6 -0
- package/dist/fundamentalTypes/nativeEnumType.d.ts.map +1 -0
- package/dist/fundamentalTypes/neverType.d.ts +6 -0
- package/dist/fundamentalTypes/neverType.d.ts.map +1 -0
- package/dist/fundamentalTypes/noneditableType.d.ts +1 -1
- package/dist/fundamentalTypes/noneditableType.d.ts.map +1 -1
- package/dist/fundamentalTypes/nullType.d.ts +1 -1
- package/dist/fundamentalTypes/nullType.d.ts.map +1 -1
- package/dist/fundamentalTypes/numberType.d.ts +1 -1
- package/dist/fundamentalTypes/numberType.d.ts.map +1 -1
- package/dist/fundamentalTypes/objectReferenceType.d.ts +1 -1
- package/dist/fundamentalTypes/objectType.d.ts +1 -1
- package/dist/fundamentalTypes/objectType.d.ts.map +1 -1
- package/dist/fundamentalTypes/promiseType.d.ts +6 -0
- package/dist/fundamentalTypes/promiseType.d.ts.map +1 -0
- package/dist/fundamentalTypes/recordType.d.ts +6 -0
- package/dist/fundamentalTypes/recordType.d.ts.map +1 -0
- package/dist/fundamentalTypes/regexpType.d.ts +1 -1
- package/dist/fundamentalTypes/regexpType.d.ts.map +1 -1
- package/dist/fundamentalTypes/setType.d.ts +1 -1
- package/dist/fundamentalTypes/setType.d.ts.map +1 -1
- package/dist/fundamentalTypes/sparseUndefinedType.d.ts +1 -1
- package/dist/fundamentalTypes/sparseUndefinedType.d.ts.map +1 -1
- package/dist/fundamentalTypes/stringType.d.ts +1 -1
- package/dist/fundamentalTypes/stringType.d.ts.map +1 -1
- package/dist/fundamentalTypes/symbolType.d.ts +8 -0
- package/dist/fundamentalTypes/symbolType.d.ts.map +1 -0
- package/dist/fundamentalTypes/tupleType.d.ts +6 -0
- package/dist/fundamentalTypes/tupleType.d.ts.map +1 -0
- package/dist/fundamentalTypes/undefinedType.d.ts +1 -1
- package/dist/fundamentalTypes/undefinedType.d.ts.map +1 -1
- package/dist/fundamentalTypes/voidType.d.ts +6 -0
- package/dist/fundamentalTypes/voidType.d.ts.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9660 -1586
- package/dist/subTypes/blobHTMLType.d.ts.map +1 -1
- package/dist/subTypes/falseType.d.ts +1 -1
- package/dist/subTypes/trueType.d.ts +1 -1
- package/dist/superTypes/SpecialNumberType.d.ts +1 -1
- package/dist/superTypes/SpecialRealNumberType.d.ts +1 -1
- package/dist/superTypes/SpecialRealNumberType.d.ts.map +1 -1
- package/dist/superTypes/buffersourceType.d.ts +1 -1
- package/dist/superTypes/buffersourceType.d.ts.map +1 -1
- package/dist/superTypes/dommatrixType.d.ts +1 -1
- package/dist/superTypes/dommatrixType.d.ts.map +1 -1
- package/dist/superTypes/dompointType.d.ts +1 -1
- package/dist/superTypes/dompointType.d.ts.map +1 -1
- package/dist/superTypes/domrectType.d.ts +1 -1
- package/dist/superTypes/domrectType.d.ts.map +1 -1
- package/dist/superTypes/errorsSpecialType.d.ts +1 -1
- package/dist/superTypes/errorsSpecialType.d.ts.map +1 -1
- package/dist/typeChoices.d.ts +33 -16
- package/dist/typeChoices.d.ts.map +1 -1
- package/dist/types.d.ts +161 -157
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/dialogs.d.ts +3 -3
- package/dist/utils/dialogs.d.ts.map +1 -1
- package/dist/utils/jsonPointer.d.ts.map +1 -1
- package/dist/utils/media.d.ts.map +1 -1
- package/dist/utils/objects.d.ts +16 -0
- package/dist/utils/objects.d.ts.map +1 -0
- package/dist/utils/types.d.ts +1 -1
- package/dist/utils/types.d.ts.map +1 -1
- package/dist/vendor-imports.d.ts +1 -1
- package/eslint.config.js +74 -0
- package/licenseInfo.json +4 -0
- package/package.json +33 -42
- package/rollup.config.js +15 -0
- package/src/formatAndTypeChoices.js +68 -54
- package/src/formats/indexedDBKey.js +9 -4
- package/src/formats/json.js +7 -4
- package/src/formats/schema.js +772 -0
- package/src/formats/structuredCloning.js +187 -86
- package/src/formats.js +61 -26
- package/src/fundamentalTypes/BooleanObjectType.js +18 -6
- package/src/fundamentalTypes/NumberObjectType.js +18 -5
- package/src/fundamentalTypes/StringObjectType.js +20 -8
- package/src/fundamentalTypes/arrayType.js +1241 -533
- package/src/fundamentalTypes/bigintObjectType.js +64 -0
- package/src/fundamentalTypes/bigintType.js +31 -5
- package/src/fundamentalTypes/blobType.js +201 -190
- package/src/fundamentalTypes/booleanType.js +63 -0
- package/src/fundamentalTypes/catchType.js +140 -0
- package/src/fundamentalTypes/dateType.js +57 -19
- package/src/fundamentalTypes/domexceptionType.js +61 -63
- package/src/fundamentalTypes/enumType.js +52 -0
- package/src/fundamentalTypes/errorType.js +20 -7
- package/src/fundamentalTypes/fileType.js +195 -189
- package/src/fundamentalTypes/filelistType.js +4 -0
- package/src/fundamentalTypes/functionType.js +150 -0
- package/src/fundamentalTypes/literalType.js +81 -0
- package/src/fundamentalTypes/mapType.js +4 -0
- package/src/fundamentalTypes/nanType.js +41 -0
- package/src/fundamentalTypes/nativeEnumType.js +155 -0
- package/src/fundamentalTypes/neverType.js +44 -0
- package/src/fundamentalTypes/noneditableType.js +19 -5
- package/src/fundamentalTypes/nullType.js +16 -6
- package/src/fundamentalTypes/numberType.js +49 -6
- package/src/fundamentalTypes/objectType.js +10 -2
- package/src/fundamentalTypes/promiseType.js +60 -0
- package/src/fundamentalTypes/recordType.js +42 -0
- package/src/fundamentalTypes/regexpType.js +51 -33
- package/src/fundamentalTypes/setType.js +4 -0
- package/src/fundamentalTypes/sparseUndefinedType.js +3 -0
- package/src/fundamentalTypes/stringType.js +254 -6
- package/src/fundamentalTypes/symbolType.js +81 -0
- package/src/fundamentalTypes/tupleType.js +39 -0
- package/src/fundamentalTypes/undefinedType.js +14 -4
- package/src/fundamentalTypes/voidType.js +48 -0
- package/src/jsoe.css +37 -3
- package/src/subTypes/blobHTMLType.js +33 -24
- package/src/superTypes/SpecialRealNumberType.js +22 -6
- package/src/superTypes/buffersourceType.js +86 -30
- package/src/superTypes/dommatrixType.js +24 -7
- package/src/superTypes/dompointType.js +27 -7
- package/src/superTypes/domrectType.js +33 -7
- package/src/superTypes/errorsSpecialType.js +30 -14
- package/src/typeChoices.js +115 -44
- package/src/types.js +129 -45
- package/src/utils/FileList.js +3 -3
- package/src/utils/dialogs.js +6 -8
- package/src/utils/objects.js +22 -0
- package/src/vendor-imports.js +1 -1
- package/tsconfig.json +2 -2
- package/vendor/jamilih/dist/jml-es.js +23 -6
- package/vendor/typeson-registry/dist/index.js +77 -47
- package/vendor/zod/lib/index.mjs +4236 -0
- package/vendor/zodex/dist/esm/dezerialize.d.ts +26 -0
- package/vendor/zodex/dist/esm/dezerialize.js +393 -0
- package/vendor/zodex/dist/esm/index.d.ts +9 -0
- package/vendor/zodex/dist/esm/index.js +4 -0
- package/vendor/zodex/dist/esm/infer.d.ts +29 -0
- package/vendor/zodex/dist/esm/infer.js +1 -0
- package/vendor/zodex/dist/esm/package.json +1 -0
- package/vendor/zodex/dist/esm/types.d.ts +201 -0
- package/vendor/zodex/dist/esm/types.js +13 -0
- package/vendor/zodex/dist/esm/ui.d.ts +23 -0
- package/vendor/zodex/dist/esm/ui.js +10 -0
- package/vendor/zodex/dist/esm/zerialize.d.ts +50 -0
- package/vendor/zodex/dist/esm/zerialize.js +417 -0
- package/vendor/zodex/dist/esm/zod-types.d.ts +11 -0
- package/vendor/zodex/dist/esm/zod-types.js +1 -0
- package/.eslintignore +0 -13
- package/.eslintrc.cjs +0 -145
- package/.nyc_output/out.json +0 -117370
- package/cypress.config.ts +0 -15
- package/demo/index-instrumented.html +0 -29
- package/demo/index-instrumented.js +0 -644
- package/demo/index.html +0 -29
- package/demo/index.js +0 -215
- package/src/formats/schemaAndArbitrary.js +0 -20
- package/src/formats/schemaOnly.js +0 -539
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonPointer.d.ts","sourceRoot":"","sources":["../../src/utils/jsonPointer.js"],"names":[],"mappings":"8BA0Ca,GAAG;AA1ChB;;;GAGG;AACH,yCAHc,MAAM,
|
|
1
|
+
{"version":3,"file":"jsonPointer.d.ts","sourceRoot":"","sources":["../../src/utils/jsonPointer.js"],"names":[],"mappings":"8BA0Ca,GAAG;AA1ChB;;;GAGG;AACH,yCAHc,MAAM,EAAA,GACP,MAAM,CAMlB;AAED;;;GAGG;AACH,wCAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;GAGG;AACH,kDAHW,MAAM,GACJ,MAAM,CASlB;AAED;;;GAGG;AACH,0CAHW,MAAM,GACJ,MAAM,EAAE,CAMpB;AAED;;GAEG;AAEH;;;;GAIG;AACH,4CAJW,eAAe,YACf,MAAM,GACJ,eAAe,GAAC,MAAM,CAQlC;AAED;;;;;GAKG;AACH,kDAJG;IAAoB,IAAI,EAAhB,MAAM;IACe,GAAG,EAAxB,eAAe;CACvB,GAAU,MAAM,GAAC,eAAe,CAOlC;AAED;;;GAGG;AACH,+CAHW,MAAM,GACJ,MAAM,CAYlB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/utils/media.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,kCALW,WAAW,UACX,iBAAiB,GAEf,IAAI,CA4DhB;AAGD;;;GAGG;AACH,0CAHW,sBAAsB,GACpB,
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/utils/media.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,kCALW,WAAW,UACX,iBAAiB,GAEf,IAAI,CA4DhB;AAGD;;;GAGG;AACH,0CAHW,sBAAsB,GACpB,OAAO,CAAC,WAAW,GAAC,IAAI,CAAC,CAarC;AAED;;;GAGG;AACH,wDAHW,yBAAyB,GAAC,SAAS,GACjC,OAAO,CAAC,WAAW,GAAC,IAAI,CAAC,CAarC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {any} ArbitraryObject
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {{[key: string]: string|NestedObject}} NestedObject
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* @param {ArbitraryObject} obj
|
|
9
|
+
* @returns {ArbitraryObject}
|
|
10
|
+
*/
|
|
11
|
+
export function copyObject(obj: ArbitraryObject): ArbitraryObject;
|
|
12
|
+
export type ArbitraryObject = any;
|
|
13
|
+
export type NestedObject = {
|
|
14
|
+
[key: string]: string | NestedObject;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=objects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../src/utils/objects.js"],"names":[],"mappings":"AAAA;;GAEG;AACH;;GAEG;AAEH;;;GAGG;AACH,gCAHW,eAAe,GACb,eAAe,CAY3B;8BApBY,GAAG;2BAGH;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAC,YAAY,CAAA;CAAC"}
|
package/dist/utils/types.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export function isNullish(obj: unknown):
|
|
1
|
+
export function isNullish(obj: unknown): obj is null | undefined;
|
|
2
2
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.js"],"names":[],"mappings":"AAGO,+BAFI,OAAO,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.js"],"names":[],"mappings":"AAGO,+BAFI,OAAO,2BAIjB"}
|
package/dist/vendor-imports.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { jml, body, nbsp, $ } from "jamilih";
|
|
2
|
-
export { getJSONType, Typeson, unescapeKeyPathComponent, structuredCloningThrowing, resurrectable, toStringTag } from "typeson-registry";
|
|
2
|
+
export { getJSONType, Typeson, unescapeKeyPathComponent, structuredCloningThrowing, resurrectable, toStringTag, hasConstructorOf } from "typeson-registry";
|
|
3
3
|
//# sourceMappingURL=vendor-imports.d.ts.map
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import ashNazg from 'eslint-config-ash-nazg';
|
|
2
|
+
|
|
3
|
+
export default [
|
|
4
|
+
{
|
|
5
|
+
name: 'JSOE/Ignores',
|
|
6
|
+
ignores: [
|
|
7
|
+
'coverage',
|
|
8
|
+
'instrumented',
|
|
9
|
+
'ignore',
|
|
10
|
+
'src/deepEqual.js',
|
|
11
|
+
'vendor',
|
|
12
|
+
'typings/**',
|
|
13
|
+
'dist'
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
...ashNazg(['sauron', 'browser']),
|
|
17
|
+
{
|
|
18
|
+
name: 'JSOE/Coverage',
|
|
19
|
+
settings: {
|
|
20
|
+
coverage: true
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'JSOE/Markdown',
|
|
25
|
+
files: ['*.md/*.js'],
|
|
26
|
+
rules: {
|
|
27
|
+
'import/unambiguous': 'off'
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'JSOE/Cypress',
|
|
32
|
+
files: ['cypress/**'],
|
|
33
|
+
rules: {
|
|
34
|
+
'unicorn/no-empty-file': 'off'
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'JSOE/main rules',
|
|
39
|
+
rules: {
|
|
40
|
+
'no-console': 0,
|
|
41
|
+
'no-shadow': 0,
|
|
42
|
+
|
|
43
|
+
'@stylistic/quotes': ['error', 'single', {
|
|
44
|
+
avoidEscape: true, allowTemplateLiterals: true
|
|
45
|
+
}],
|
|
46
|
+
|
|
47
|
+
'jsdoc/require-jsdoc': ['warn', {
|
|
48
|
+
contexts: [
|
|
49
|
+
'Program > VariableDeclaration > ' +
|
|
50
|
+
'VariableDeclarator > ArrowFunctionExpression',
|
|
51
|
+
'Program > VariableDeclaration > ' +
|
|
52
|
+
'VariableDeclarator > FunctionExpression',
|
|
53
|
+
'ExportNamedDeclaration > VariableDeclaration > ' +
|
|
54
|
+
'VariableDeclarator > ArrowFunctionExpression',
|
|
55
|
+
'ExportNamedDeclaration > VariableDeclaration > ' +
|
|
56
|
+
'VariableDeclarator > FunctionExpression',
|
|
57
|
+
'ExportDefaultDeclaration > ArrowFunctionExpression',
|
|
58
|
+
'ExportDefaultDeclaration > FunctionExpression',
|
|
59
|
+
|
|
60
|
+
'ClassDeclaration',
|
|
61
|
+
'ClassExpression',
|
|
62
|
+
'FunctionDeclaration', // Default is true
|
|
63
|
+
'MethodDefinition'
|
|
64
|
+
]
|
|
65
|
+
}],
|
|
66
|
+
|
|
67
|
+
// Disable until find time
|
|
68
|
+
'prefer-named-capture-group': 0,
|
|
69
|
+
// Disable; waiting on https://github.com/mysticatea/eslint-plugin-node/issues/162
|
|
70
|
+
'n/no-unpublished-import': 0,
|
|
71
|
+
'unicorn/no-this-assignment': 0
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
];
|
package/licenseInfo.json
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@es-joy/jsoe",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"main": "./src/index.js",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
},
|
|
13
13
|
"description": "Editing of arbitrary JavaScript objects",
|
|
14
14
|
"browserslist": [
|
|
15
|
-
"
|
|
15
|
+
"defaults, not op_mini all"
|
|
16
16
|
],
|
|
17
17
|
"nyc": {
|
|
18
18
|
"excludeAfterRemap": true,
|
|
@@ -23,54 +23,40 @@
|
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@brettz9/node-static": "^0.1.1",
|
|
26
|
-
"jamilih": "0.
|
|
26
|
+
"jamilih": "0.59.2",
|
|
27
27
|
"sceditor": "3.2.0",
|
|
28
|
-
"typeson-registry": "
|
|
28
|
+
"typeson-registry": "11.0.0",
|
|
29
|
+
"zod": "^3.23.8",
|
|
30
|
+
"zodex": "github:brettz9/zodex#browser-dist"
|
|
29
31
|
},
|
|
30
32
|
"devDependencies": {
|
|
31
|
-
"@babel/core": "^7.
|
|
32
|
-
"@babel/plugin-transform-modules-commonjs": "^7.
|
|
33
|
-
"@babel/preset-env": "^7.
|
|
34
|
-
"@babel/register": "^7.
|
|
35
|
-
"@
|
|
36
|
-
"@cypress/code-coverage": "^3.12.13",
|
|
33
|
+
"@babel/core": "^7.25.2",
|
|
34
|
+
"@babel/plugin-transform-modules-commonjs": "^7.24.8",
|
|
35
|
+
"@babel/preset-env": "^7.25.3",
|
|
36
|
+
"@babel/register": "^7.24.6",
|
|
37
|
+
"@cypress/code-coverage": "^3.12.44",
|
|
37
38
|
"@rollup/plugin-babel": "^6.0.4",
|
|
38
|
-
"@rollup/plugin-commonjs": "^
|
|
39
|
+
"@rollup/plugin-commonjs": "^26.0.1",
|
|
39
40
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
40
|
-
"@
|
|
41
|
-
"@types/
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"cypress": "^13.6.1",
|
|
41
|
+
"@types/jsdom": "^21.1.7",
|
|
42
|
+
"@types/node": "^22.1.0",
|
|
43
|
+
"axe-core": "^4.10.0",
|
|
44
|
+
"cypress": "^13.13.2",
|
|
45
45
|
"cypress-axe": "^1.5.0",
|
|
46
|
-
"eslint": "^8.
|
|
47
|
-
"eslint-config-ash-nazg": "^
|
|
48
|
-
"eslint-config-standard": "^17.1.0",
|
|
49
|
-
"eslint-plugin-array-func": "^4.0.0",
|
|
50
|
-
"eslint-plugin-compat": "^4.2.0",
|
|
51
|
-
"eslint-plugin-cypress": "^2.15.1",
|
|
52
|
-
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
53
|
-
"eslint-plugin-html": "^7.1.0",
|
|
54
|
-
"eslint-plugin-import": "^2.29.0",
|
|
55
|
-
"eslint-plugin-jsdoc": "^46.9.1",
|
|
56
|
-
"eslint-plugin-markdown": "^3.0.1",
|
|
57
|
-
"eslint-plugin-n": "^16.4.0",
|
|
58
|
-
"eslint-plugin-no-unsanitized": "^4.0.2",
|
|
59
|
-
"eslint-plugin-no-use-extend-native": "^0.5.0",
|
|
60
|
-
"eslint-plugin-promise": "^6.1.1",
|
|
61
|
-
"eslint-plugin-sonarjs": "^0.23.0",
|
|
62
|
-
"eslint-plugin-standard": "^4.1.0",
|
|
63
|
-
"eslint-plugin-unicorn": "^49.0.0",
|
|
46
|
+
"eslint": "^9.8.0",
|
|
47
|
+
"eslint-config-ash-nazg": "^36.11.1",
|
|
64
48
|
"fast-deep-equal": "^3.1.3",
|
|
65
|
-
"jsdom": "^
|
|
49
|
+
"jsdom": "^24.1.1",
|
|
50
|
+
"license-badger": "^0.21.1",
|
|
66
51
|
"npm-run-all": "^4.1.5",
|
|
67
|
-
"nyc": "^
|
|
68
|
-
"open-cli": "^
|
|
69
|
-
"rimraf": "^
|
|
70
|
-
"rollup": "4.
|
|
52
|
+
"nyc": "^17.0.0",
|
|
53
|
+
"open-cli": "^8.0.0",
|
|
54
|
+
"rimraf": "^6.0.1",
|
|
55
|
+
"rollup": "4.20.0",
|
|
71
56
|
"rollup-plugin-istanbul": "^5.0.0",
|
|
57
|
+
"rollup-plugin-no-op": "^1.0.2",
|
|
72
58
|
"rollup-plugin-node-builtins": "^2.1.2",
|
|
73
|
-
"typescript": "^5.
|
|
59
|
+
"typescript": "^5.5.4",
|
|
74
60
|
"typeson": "^9.0.3",
|
|
75
61
|
"webappfind-demos-samples": "^0.7.0"
|
|
76
62
|
},
|
|
@@ -86,7 +72,7 @@
|
|
|
86
72
|
"author": "Brett Zamir",
|
|
87
73
|
"contributors": [],
|
|
88
74
|
"engines": {
|
|
89
|
-
"node": ">=
|
|
75
|
+
"node": ">=18.0.0"
|
|
90
76
|
},
|
|
91
77
|
"bugs": "https://github.com/es-joy/jsoe/issues",
|
|
92
78
|
"license": "MIT",
|
|
@@ -94,6 +80,7 @@
|
|
|
94
80
|
"scripts": {
|
|
95
81
|
"tsc": "tsc",
|
|
96
82
|
"tsc-cypress": "tsc -p cypress/tsconfig.json",
|
|
83
|
+
"license-badge": "license-badger --corrections --uncategorizedLicenseTemplate \"\\${license} (\\${name} (\\${version}))\" --filteredTypes=nonempty --textTemplate \"License types\n(project, deps, and bundled devDeps)\" --packageJson --production badges/licenses-badge.svg",
|
|
97
84
|
"eslint": "eslint .",
|
|
98
85
|
"lint": "npm run eslint --",
|
|
99
86
|
"coverage": "open-cli http://localhost:8087/coverage/lcov-report/",
|
|
@@ -110,10 +97,14 @@
|
|
|
110
97
|
"copy-index": "echo \"Copy our index.html file too? \"",
|
|
111
98
|
"copy-jamilih": "cp node_modules/jamilih/dist/jml-es.js vendor/jamilih/dist/jml-es.js",
|
|
112
99
|
"copy-typeson-registry": "cp node_modules/typeson-registry/dist/index.js vendor/typeson-registry/dist/index.js",
|
|
113
|
-
"copy": "
|
|
100
|
+
"copy-zod": "cp node_modules/zod/lib/index.mjs vendor/zod/lib/index.mjs",
|
|
101
|
+
"copy-zodex": "cp -R node_modules/zodex/dist/esm vendor/zodex/dist",
|
|
102
|
+
"copy": "run-p copy-jamilih copy-typeson-registry copy-zod copy-zodex",
|
|
114
103
|
"instrument": "run-s -c instrument-remove instrument-add copy-index rollup",
|
|
115
104
|
"cypress:log": "ELECTRON_ENABLE_LOGGING=1 cypress run; nyc report",
|
|
116
105
|
"cypress": "cypress run; nyc report",
|
|
106
|
+
"cypress:record": "cypress run --record --parallel",
|
|
107
|
+
"report": "nyc report",
|
|
117
108
|
"test": "npm run eslint && npm run rollup && npm run cypress"
|
|
118
109
|
}
|
|
119
110
|
}
|
package/rollup.config.js
CHANGED
|
@@ -4,9 +4,11 @@ import commonjs from '@rollup/plugin-commonjs';
|
|
|
4
4
|
// import babel from 'rollup-plugin-babel';
|
|
5
5
|
// import {terser} from 'rollup-plugin-terser';
|
|
6
6
|
import istanbul from 'rollup-plugin-istanbul';
|
|
7
|
+
import noOp from 'rollup-plugin-no-op';
|
|
7
8
|
|
|
8
9
|
export default [{
|
|
9
10
|
input: 'src/index.js',
|
|
11
|
+
external: ['react'], // Todo: remove when removed from Zodex
|
|
10
12
|
output: {
|
|
11
13
|
file: 'dist/index.js',
|
|
12
14
|
format: 'es'
|
|
@@ -22,6 +24,19 @@ export default [{
|
|
|
22
24
|
format: 'es'
|
|
23
25
|
},
|
|
24
26
|
plugins: [
|
|
27
|
+
noOp({ids: ['react']}), // todo: remove when Zodex may remove dep.
|
|
28
|
+
istanbul(),
|
|
29
|
+
nodeResolve(),
|
|
30
|
+
commonjs()
|
|
31
|
+
]
|
|
32
|
+
}, {
|
|
33
|
+
input: 'demo/index-schema.js',
|
|
34
|
+
output: {
|
|
35
|
+
file: 'instrumented/demo/index-schema.js',
|
|
36
|
+
format: 'es'
|
|
37
|
+
},
|
|
38
|
+
plugins: [
|
|
39
|
+
noOp({ids: ['react']}), // todo: remove when Zodex may remove dep.
|
|
25
40
|
istanbul(),
|
|
26
41
|
nodeResolve(),
|
|
27
42
|
commonjs()
|
|
@@ -13,14 +13,17 @@ import {$e, DOM} from './utils/templateUtils.js';
|
|
|
13
13
|
* Defaults to structured cloning.
|
|
14
14
|
* @todo Compose from format metadata, so can make user customizable.
|
|
15
15
|
* @param {object} cfg
|
|
16
|
-
* @param {string} [cfg.
|
|
16
|
+
* @param {string[]} [cfg.schemas]
|
|
17
|
+
* @param {string} [cfg.selectedSchema]
|
|
17
18
|
* @param {boolean} [cfg.hasKeyPath] Whether or not a key path is expected; if
|
|
18
19
|
* true, an indexedDB key is not allowed here as a key does not support
|
|
19
20
|
* the object type which is needed for a key path.
|
|
20
21
|
* @returns {DocumentFragment}
|
|
21
22
|
*/
|
|
22
|
-
export const getFormatAndSchemaChoices = ({
|
|
23
|
-
|
|
23
|
+
export const getFormatAndSchemaChoices = ({
|
|
24
|
+
schemas, selectedSchema, hasKeyPath
|
|
25
|
+
} = {}) => {
|
|
26
|
+
const hasSchema = schemas && schemas.length;
|
|
24
27
|
// eslint-disable-next-line @stylistic/max-len -- Long
|
|
25
28
|
return /** @type {[optText: string, opts: {value: string, selected?: boolean}][]} */ ([
|
|
26
29
|
['JSON only', {value: 'json'}],
|
|
@@ -29,35 +32,18 @@ export const getFormatAndSchemaChoices = ({schema, hasKeyPath} = {}) => {
|
|
|
29
32
|
: [['IndexedDB key', {value: 'indexedDBKey'}]]),
|
|
30
33
|
['Structured Clone (via Typeson JSON)', {
|
|
31
34
|
value: 'structuredCloning', selected: !hasSchema
|
|
32
|
-
}]
|
|
33
|
-
/* schema:
|
|
35
|
+
}],
|
|
34
36
|
...(hasSchema
|
|
35
|
-
?
|
|
36
|
-
[`Schema
|
|
37
|
-
value: '
|
|
38
|
-
dataset: {schema}
|
|
39
|
-
}],
|
|
40
|
-
[`Schema only: ${schema}`, {
|
|
41
|
-
value: 'schemaOnly',
|
|
37
|
+
? schemas.map((schema, idx) => {
|
|
38
|
+
return [`Schema: ${schema}`, {
|
|
39
|
+
value: 'schema',
|
|
42
40
|
dataset: {schema},
|
|
43
|
-
selected:
|
|
44
|
-
}]
|
|
45
|
-
|
|
46
|
-
: []
|
|
47
|
-
)
|
|
48
|
-
*/
|
|
49
|
-
/*
|
|
50
|
-
// This can be supported for editing only
|
|
51
|
-
['Arbitrary (Non-Typeson-serializable will be read-only)', {
|
|
52
|
-
value: 'arbitrary',
|
|
53
|
-
title: 'Any value that the typeson-registry supports ' +
|
|
54
|
-
'for structured cloning'
|
|
55
|
-
}]
|
|
56
|
-
*/
|
|
41
|
+
selected: selectedSchema ? schema === selectedSchema : idx === 0
|
|
42
|
+
}];
|
|
43
|
+
})
|
|
44
|
+
: [])
|
|
57
45
|
]).map(([optText, optAtts]) => {
|
|
58
|
-
return
|
|
59
|
-
jml('option', optAtts, [optText])
|
|
60
|
-
);
|
|
46
|
+
return jml('option', optAtts, [optText]);
|
|
61
47
|
}).reduce((
|
|
62
48
|
frag,
|
|
63
49
|
option
|
|
@@ -74,11 +60,16 @@ export const getFormatAndSchemaChoices = ({schema, hasKeyPath} = {}) => {
|
|
|
74
60
|
* @returns {Promise<void>}
|
|
75
61
|
*/
|
|
76
62
|
|
|
63
|
+
/**
|
|
64
|
+
* @typedef {import('./formats/schema.js').ZodexSchema} ZodexSchema
|
|
65
|
+
*/
|
|
66
|
+
|
|
77
67
|
/**
|
|
78
68
|
* Builds a selector and container for types.
|
|
79
69
|
* @param {object} cfg
|
|
80
|
-
* @param {string} [cfg.
|
|
81
|
-
* @param {
|
|
70
|
+
* @param {string[]} [cfg.schemas] The schema names
|
|
71
|
+
* @param {(schema: string) => Promise<ZodexSchema>} [cfg.getSchemaContent] The
|
|
72
|
+
* schema content retriever
|
|
82
73
|
* @param {boolean} [cfg.hasValue] Set to `true` if you are supplying
|
|
83
74
|
* your own value. If `false` and `hasKeyPath` is `true`,
|
|
84
75
|
* will initialize with an object.
|
|
@@ -90,9 +81,10 @@ export const getFormatAndSchemaChoices = ({schema, hasKeyPath} = {}) => {
|
|
|
90
81
|
* plain object).
|
|
91
82
|
* @param {string} [cfg.typeNamespace] Used to prevent conflicts with other
|
|
92
83
|
* instances of typeChoices on the page
|
|
84
|
+
* @param {string} [cfg.selectedSchema]
|
|
93
85
|
* @param {import('./formats.js').default} [cfg.formats]
|
|
94
86
|
* @param {import('./types.js').default} [cfg.types]
|
|
95
|
-
* @returns {{
|
|
87
|
+
* @returns {Promise<{
|
|
96
88
|
* formatChoices: FormatChoices,
|
|
97
89
|
* typesHolder: TypesHolder,
|
|
98
90
|
* domArray: [formatChoices: FormatChoices, typesHolder: TypesHolder],
|
|
@@ -103,20 +95,21 @@ export const getFormatAndSchemaChoices = ({schema, hasKeyPath} = {}) => {
|
|
|
103
95
|
* setValue: SetValue,
|
|
104
96
|
* formats: import('./formats.js').default,
|
|
105
97
|
* types: import('./types.js').default
|
|
106
|
-
* }} The selector for types and the container for them. Both should be
|
|
98
|
+
* }>} The selector for types and the container for them. Both should be
|
|
107
99
|
* added to the page.
|
|
108
100
|
*/
|
|
109
|
-
export function formatAndTypeChoices ({
|
|
110
|
-
|
|
111
|
-
|
|
101
|
+
export async function formatAndTypeChoices ({
|
|
102
|
+
schemas,
|
|
103
|
+
getSchemaContent,
|
|
112
104
|
hasValue,
|
|
113
105
|
singleValue,
|
|
114
106
|
hasKeyPath,
|
|
115
107
|
typeNamespace,
|
|
108
|
+
selectedSchema,
|
|
116
109
|
formats = new Formats(),
|
|
117
110
|
types = new Types()
|
|
118
111
|
}) {
|
|
119
|
-
const format = 'structuredCloning';
|
|
112
|
+
const format = schemas && schemas.length ? 'schema' : 'structuredCloning';
|
|
120
113
|
const formatChoices = /** @type {FormatChoices} */ (jml('select', {
|
|
121
114
|
class: 'formatChoices',
|
|
122
115
|
hidden: singleValue,
|
|
@@ -126,13 +119,19 @@ export function formatAndTypeChoices ({
|
|
|
126
119
|
* Sets the desired format and rebuilds the type choices.
|
|
127
120
|
* @callback SetFormat
|
|
128
121
|
* @param {string} valueFormat
|
|
129
|
-
* @
|
|
122
|
+
* @this {HTMLSelectElement & {
|
|
123
|
+
* $buildTypeChoices: TypeChoiceBuilder
|
|
124
|
+
* }}
|
|
125
|
+
* @returns {Promise<void>}
|
|
130
126
|
*/
|
|
131
127
|
|
|
132
128
|
/**
|
|
133
129
|
* Rebuilds the type choices.
|
|
134
130
|
* @callback TypeChoiceBuilder
|
|
135
|
-
* @
|
|
131
|
+
* @this {HTMLSelectElement & {
|
|
132
|
+
* $buildTypeChoices: TypeChoiceBuilder
|
|
133
|
+
* }}
|
|
134
|
+
* @returns {Promise<void>}
|
|
136
135
|
*/
|
|
137
136
|
|
|
138
137
|
/**
|
|
@@ -145,38 +144,49 @@ export function formatAndTypeChoices ({
|
|
|
145
144
|
/**
|
|
146
145
|
* @type {SetFormat}
|
|
147
146
|
*/
|
|
148
|
-
$setFormat (valueFormat) {
|
|
147
|
+
async $setFormat (valueFormat) {
|
|
149
148
|
this.value = valueFormat;
|
|
150
|
-
this.$buildTypeChoices();
|
|
149
|
+
await this.$buildTypeChoices();
|
|
151
150
|
},
|
|
152
151
|
|
|
153
152
|
/**
|
|
154
153
|
* @type {TypeChoiceBuilder}
|
|
155
154
|
*/
|
|
156
|
-
$buildTypeChoices () {
|
|
155
|
+
async $buildTypeChoices () {
|
|
157
156
|
DOM.removeChildren(typesHolder);
|
|
157
|
+
const {schema} = this.selectedOptions[0].dataset;
|
|
158
158
|
jml({'#': buildTypeChoices({
|
|
159
159
|
topRoot: /** @type {HTMLDivElement} */ (
|
|
160
160
|
$e(typesHolder, 'div[data-type]')
|
|
161
161
|
),
|
|
162
162
|
// resultType: 'both',
|
|
163
|
-
format:
|
|
163
|
+
format: /** @type {import('./formats.js').AvailableFormat} */ (
|
|
164
|
+
this.value
|
|
165
|
+
),
|
|
164
166
|
formats,
|
|
165
167
|
types,
|
|
166
168
|
typeNamespace,
|
|
167
169
|
requireObject: hasKeyPath,
|
|
168
170
|
objectHasValue: hasValue,
|
|
169
171
|
schema,
|
|
170
|
-
schemaContent
|
|
172
|
+
schemaContent: await getSchemaContent?.(
|
|
173
|
+
/** @type {string} */ (schema)
|
|
174
|
+
)
|
|
171
175
|
}).domArray}, typesHolder);
|
|
172
176
|
}
|
|
173
177
|
},
|
|
174
|
-
$on: {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
$on: {
|
|
179
|
+
async change () {
|
|
180
|
+
await /**
|
|
181
|
+
* @type {HTMLSelectElement & {
|
|
182
|
+
* $buildTypeChoices: TypeChoiceBuilder
|
|
183
|
+
* }}
|
|
184
|
+
*/ (
|
|
185
|
+
this
|
|
186
|
+
).$buildTypeChoices();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}, [getFormatAndSchemaChoices({schemas, hasKeyPath, selectedSchema})]));
|
|
180
190
|
|
|
181
191
|
/**
|
|
182
192
|
* @callback TypeSelectGetter
|
|
@@ -189,7 +199,7 @@ export function formatAndTypeChoices ({
|
|
|
189
199
|
* @property {TypeSelectGetter} $getTypeSelect
|
|
190
200
|
*/
|
|
191
201
|
|
|
192
|
-
const typesHolder =
|
|
202
|
+
const typesHolder = (
|
|
193
203
|
jml('div', {class: 'typesHolder', $custom: {
|
|
194
204
|
/**
|
|
195
205
|
* @type {TypeRootGetter}
|
|
@@ -210,6 +220,10 @@ export function formatAndTypeChoices ({
|
|
|
210
220
|
}})
|
|
211
221
|
);
|
|
212
222
|
|
|
223
|
+
const schema = format === 'schema'
|
|
224
|
+
? formatChoices.selectedOptions[0].dataset.schema
|
|
225
|
+
: undefined;
|
|
226
|
+
|
|
213
227
|
jml({'#': buildTypeChoices({
|
|
214
228
|
// resultType: 'both',
|
|
215
229
|
topRoot: /** @type {HTMLDivElement} */ ($e(typesHolder, 'div[data-type]')),
|
|
@@ -220,7 +234,7 @@ export function formatAndTypeChoices ({
|
|
|
220
234
|
requireObject: hasKeyPath,
|
|
221
235
|
objectHasValue: hasValue,
|
|
222
236
|
schema,
|
|
223
|
-
schemaContent
|
|
237
|
+
schemaContent: await getSchemaContent?.(/** @type {string} */ (schema))
|
|
224
238
|
}).domArray}, typesHolder);
|
|
225
239
|
|
|
226
240
|
return {
|
|
@@ -283,14 +297,14 @@ export function formatAndTypeChoices ({
|
|
|
283
297
|
/** @type {SetValue} */
|
|
284
298
|
async setValue (value, stateObj) {
|
|
285
299
|
const rootEditUI = /** @type {HTMLDivElement} */ (
|
|
286
|
-
await formats.getControlsForFormatAndValue(
|
|
300
|
+
(await formats.getControlsForFormatAndValue(
|
|
287
301
|
types,
|
|
288
302
|
/** @type {import('./formats.js').AvailableFormat} */ (
|
|
289
303
|
formatChoices.value
|
|
290
304
|
),
|
|
291
305
|
value,
|
|
292
306
|
stateObj
|
|
293
|
-
)
|
|
307
|
+
)).rootUI
|
|
294
308
|
);
|
|
295
309
|
const type = Types.getTypeForRoot(rootEditUI);
|
|
296
310
|
// eslint-disable-next-line @stylistic/max-len -- Long
|
|
@@ -27,17 +27,22 @@ const indexedDBKey = {
|
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
29
|
convertFromTypeson (typesonType) {
|
|
30
|
-
return typesonToIndexedDBKey.get(typesonType);
|
|
30
|
+
return {type: typesonToIndexedDBKey.get(typesonType)};
|
|
31
31
|
},
|
|
32
32
|
iterate (records, stateObj) {
|
|
33
33
|
stateObj.format = 'indexedDBKey';
|
|
34
34
|
return structuredCloning.iterate(records, stateObj);
|
|
35
35
|
},
|
|
36
|
-
|
|
36
|
+
getTypesAndSchemasForState (types, state) {
|
|
37
|
+
/* istanbul ignore else -- See below */
|
|
37
38
|
if (!state || ['array'].includes(state)) {
|
|
38
|
-
return
|
|
39
|
+
return {
|
|
40
|
+
types: this.types(),
|
|
41
|
+
schemaObjects: []
|
|
42
|
+
};
|
|
39
43
|
}
|
|
40
|
-
//
|
|
44
|
+
// eslint-disable-next-line @stylistic/max-len -- Long
|
|
45
|
+
/* istanbul ignore next -- Can't be object, so shouldn't normally reach here */
|
|
41
46
|
return undefined;
|
|
42
47
|
}
|
|
43
48
|
};
|
package/src/formats/json.js
CHANGED
|
@@ -26,7 +26,7 @@ const json = {
|
|
|
26
26
|
},
|
|
27
27
|
// A hack until we simply pass in our own types or do own parsing
|
|
28
28
|
convertFromTypeson (typesonType) {
|
|
29
|
-
return typesonToJson.get(typesonType);
|
|
29
|
+
return {type: typesonToJson.get(typesonType)};
|
|
30
30
|
},
|
|
31
31
|
testInvalid (newType, value) {
|
|
32
32
|
switch (newType) {
|
|
@@ -41,12 +41,15 @@ const json = {
|
|
|
41
41
|
return undefined; // Todo: Fix?
|
|
42
42
|
}
|
|
43
43
|
},
|
|
44
|
-
|
|
44
|
+
getTypesAndSchemasForState (types, state) {
|
|
45
45
|
/* istanbul ignore else -- No other states apparently */
|
|
46
46
|
if (!state || ['array', 'object'].includes(state)) {
|
|
47
|
-
return
|
|
47
|
+
return {
|
|
48
|
+
types: this.types(),
|
|
49
|
+
schemaObjects: []
|
|
50
|
+
};
|
|
48
51
|
}
|
|
49
|
-
|
|
52
|
+
/* istanbul ignore next -- Shouldn't normally reach here */
|
|
50
53
|
return undefined;
|
|
51
54
|
}
|
|
52
55
|
};
|