@adobe/design-data-spec 3.5.0 → 4.1.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 +3 -0
- package/conformance/README.md +24 -2
- package/conformance/generation/README.md +6 -6
- package/conformance/generation/mode-set-edit/input/tokens.tokens.json +3 -3
- package/conformance/generation/mode-set-token/input/tokens.tokens.json +2 -2
- package/conformance/manifest-extensions/README.md +63 -0
- package/conformance/manifest-extensions/base/dataset.json +22 -0
- package/conformance/manifest-extensions/invalid/component-missing-name/expected-errors.json +7 -0
- package/conformance/manifest-extensions/invalid/component-missing-name/extensions/components/broken.json +1 -0
- package/conformance/manifest-extensions/invalid/component-missing-name/manifest.json +4 -0
- package/conformance/manifest-extensions/invalid/extensions-dir-absolute-path/expected-errors.json +1 -0
- package/conformance/manifest-extensions/invalid/extensions-dir-absolute-path/manifest.json +5 -0
- package/conformance/manifest-extensions/invalid/extensions-dir-parent-traversal/expected-errors.json +1 -0
- package/conformance/manifest-extensions/invalid/extensions-dir-parent-traversal/manifest.json +5 -0
- package/conformance/manifest-extensions/invalid/field-invalid-kind/expected-errors.json +6 -0
- package/conformance/manifest-extensions/invalid/field-invalid-kind/extensions/fields/broken.json +7 -0
- package/conformance/manifest-extensions/invalid/field-invalid-kind/manifest.json +4 -0
- package/conformance/manifest-extensions/invalid/guideline-invalid-category/expected-errors.json +6 -0
- package/conformance/manifest-extensions/invalid/guideline-invalid-category/extensions/guidelines/broken.json +7 -0
- package/conformance/manifest-extensions/invalid/guideline-invalid-category/manifest.json +4 -0
- package/conformance/manifest-extensions/invalid/override-missing-uuid/expected-errors.json +1 -0
- package/conformance/manifest-extensions/invalid/override-missing-uuid/extensions/relationships/bad-override.json +7 -0
- package/conformance/manifest-extensions/invalid/override-missing-uuid/manifest.json +4 -0
- package/conformance/manifest-extensions/invalid/platform-extension-missing-extends/expected-errors.json +6 -0
- package/conformance/manifest-extensions/invalid/platform-extension-missing-extends/extensions/platform-extensions/broken.json +4 -0
- package/conformance/manifest-extensions/invalid/platform-extension-missing-extends/manifest.json +4 -0
- package/conformance/manifest-extensions/invalid/relationship-missing-scope/expected-errors.json +6 -0
- package/conformance/manifest-extensions/invalid/relationship-missing-scope/extensions/relationships/broken.json +4 -0
- package/conformance/manifest-extensions/invalid/relationship-missing-scope/manifest.json +4 -0
- package/conformance/manifest-extensions/invalid/token-invalid-uuid/expected-errors.json +6 -0
- package/conformance/manifest-extensions/invalid/token-invalid-uuid/extensions/tokens/broken.tokens.json +7 -0
- package/conformance/manifest-extensions/invalid/token-invalid-uuid/manifest.json +4 -0
- package/conformance/manifest-extensions/invalid/unknown-subdir-name/expected-errors.json +6 -0
- package/conformance/manifest-extensions/invalid/unknown-subdir-name/extensions/bogus-subdir/whatever.json +1 -0
- package/conformance/manifest-extensions/invalid/unknown-subdir-name/manifest.json +4 -0
- package/conformance/manifest-extensions/invalid/unknown-term-id/expected-errors.json +1 -0
- package/conformance/manifest-extensions/invalid/unknown-term-id/extensions/platform-extensions/ios-states.json +5 -0
- package/conformance/manifest-extensions/invalid/unknown-term-id/manifest.json +4 -0
- package/conformance/manifest-extensions/valid/custom-extensions-dir/expected.json +1 -0
- package/conformance/manifest-extensions/valid/custom-extensions-dir/manifest.json +5 -0
- package/conformance/manifest-extensions/valid/custom-extensions-dir/platform-extras/components/tab-bar-ios.json +9 -0
- package/conformance/manifest-extensions/valid/injects-component/expected.json +1 -0
- package/conformance/manifest-extensions/valid/injects-component/extensions/components/tab-bar-ios.json +9 -0
- package/conformance/manifest-extensions/valid/injects-component/manifest.json +4 -0
- package/conformance/manifest-extensions/valid/injects-field/expected.json +1 -0
- package/conformance/manifest-extensions/valid/injects-field/extensions/fields/hapticStyle.json +8 -0
- package/conformance/manifest-extensions/valid/injects-field/manifest.json +4 -0
- package/conformance/manifest-extensions/valid/injects-guideline/expected.json +1 -0
- package/conformance/manifest-extensions/valid/injects-guideline/extensions/guidelines/ios-haptics.json +9 -0
- package/conformance/manifest-extensions/valid/injects-guideline/manifest.json +4 -0
- package/conformance/manifest-extensions/valid/injects-platform-extension/expected.json +12 -0
- package/conformance/manifest-extensions/valid/injects-platform-extension/extensions/platform-extensions/ios-states.json +5 -0
- package/conformance/manifest-extensions/valid/injects-platform-extension/manifest.json +4 -0
- package/conformance/manifest-extensions/valid/injects-relationship/expected.json +7 -0
- package/conformance/manifest-extensions/valid/injects-relationship/extensions/relationships/button.json +5 -0
- package/conformance/manifest-extensions/valid/injects-relationship/manifest.json +4 -0
- package/conformance/manifest-extensions/valid/later-file-wins/expected.json +1 -0
- package/conformance/manifest-extensions/valid/later-file-wins/extensions/components/a-tab-bar-ios.json +9 -0
- package/conformance/manifest-extensions/valid/later-file-wins/extensions/components/b-tab-bar-ios.json +9 -0
- package/conformance/manifest-extensions/valid/later-file-wins/manifest.json +4 -0
- package/conformance/manifest-extensions/valid/override-entry-skips-schema-validation/expected.json +1 -0
- package/conformance/manifest-extensions/valid/override-entry-skips-schema-validation/extensions/relationships/a-override.json +9 -0
- package/conformance/manifest-extensions/valid/override-entry-skips-schema-validation/extensions/relationships/z-add.json +5 -0
- package/conformance/manifest-extensions/valid/override-entry-skips-schema-validation/manifest.json +4 -0
- package/conformance/manifest-extensions/valid/override-relationship-by-uuid/expected.json +7 -0
- package/conformance/manifest-extensions/valid/override-relationship-by-uuid/extensions/relationships/a-override.json +9 -0
- package/conformance/manifest-extensions/valid/override-relationship-by-uuid/extensions/relationships/z-add.json +5 -0
- package/conformance/manifest-extensions/valid/override-relationship-by-uuid/manifest.json +4 -0
- package/conformance/manifest-extensions/valid/plain-add-uuid-collision-append/expected.json +5 -0
- package/conformance/manifest-extensions/valid/plain-add-uuid-collision-append/extensions/relationships/button.json +5 -0
- package/conformance/manifest-extensions/valid/plain-add-uuid-collision-append/extensions/relationships/slider.json +5 -0
- package/conformance/manifest-extensions/valid/plain-add-uuid-collision-append/manifest.json +4 -0
- package/conformance/manifest-extensions/valid/remove-relationship-by-uuid/expected.json +1 -0
- package/conformance/manifest-extensions/valid/remove-relationship-by-uuid/extensions/relationships/button.json +5 -0
- package/conformance/manifest-extensions/valid/remove-relationship-by-uuid/extensions/relationships/remove-button.json +4 -0
- package/conformance/manifest-extensions/valid/remove-relationship-by-uuid/manifest.json +4 -0
- package/conformance/manifest-extensions/valid/tokens-sorted-order/expected.json +8 -0
- package/conformance/manifest-extensions/valid/tokens-sorted-order/extensions/tokens/a.tokens.json +7 -0
- package/conformance/manifest-extensions/valid/tokens-sorted-order/extensions/tokens/b.tokens.json +7 -0
- package/conformance/manifest-extensions/valid/tokens-sorted-order/manifest.json +4 -0
- package/conformance/reference/set-alias-dark/expected.json +1 -1
- package/conformance/reference/set-alias-dark/input/tokens.tokens.json +2 -2
- package/conformance/reference/set-alias-light/expected.json +1 -1
- package/conformance/reference/set-alias-light/input/tokens.tokens.json +2 -2
- package/package.json +1 -1
- package/rules/rules.yaml +17 -0
- package/schemas/manifest.schema.json +43 -101
- package/spec/cascade.md +3 -1
- package/spec/manifest-schema-override-spike.md +6 -3
- package/spec/manifest.md +108 -66
- package/spec/taxonomy.md +2 -2
- package/spec/token-format.md +28 -0
package/README.md
CHANGED
|
@@ -4,6 +4,9 @@ Normative **Design Data Specification** artifacts for Spectrum: human-readable s
|
|
|
4
4
|
|
|
5
5
|
**Spec version:** `1.0.0-draft` — see [`spec/index.md`](spec/index.md).
|
|
6
6
|
|
|
7
|
+
See [`spec/manifest.md`](spec/manifest.md) for the platform manifest spec, including the
|
|
8
|
+
`extensions/` directory model.
|
|
9
|
+
|
|
7
10
|
## Layers
|
|
8
11
|
|
|
9
12
|
1. **JSON Schemas** (Draft 2020-12) — structural (per-file) validation; canonical `$id` under `https://opensource.adobe.com/spectrum-design-data/schemas/v0/`.
|
package/conformance/README.md
CHANGED
|
@@ -79,14 +79,14 @@ These fixtures verify the field-mapping contract in [Evolution — Legacy format
|
|
|
79
79
|
| Folder | Intent |
|
|
80
80
|
| --------------------------- | -------------------------------------------------------------------------------------------------- |
|
|
81
81
|
| `generation/flat-token` | A single cascade token with no mode sets maps to a single keyed entry `{ slug: { value, uuid } }`. |
|
|
82
|
-
| `generation/mode-set-token` | Multiple cascade tokens sharing a `
|
|
82
|
+
| `generation/mode-set-token` | Multiple cascade tokens sharing a `conceptId` merge into a single `sets`-keyed entry. |
|
|
83
83
|
|
|
84
84
|
The Rust SDK drives these fixtures via `design-data migrate legacy-output` (see `sdk/core/src/legacy.rs`).
|
|
85
85
|
Consumer implementations MUST regenerate each `input/` and diff against `expected/` to claim conformance
|
|
86
86
|
with the output-generator determinism contract.
|
|
87
87
|
|
|
88
88
|
See [`generation/README.md`](generation/README.md) for the fixture format, the run command, and
|
|
89
|
-
documentation of the `
|
|
89
|
+
documentation of the `conceptId`/`set_schema` cascade grouping fields used in `mode-set-token`.
|
|
90
90
|
|
|
91
91
|
***
|
|
92
92
|
|
|
@@ -112,3 +112,25 @@ Each **query** case lives under `query/<name>/` with:
|
|
|
112
112
|
| `query/and-or-precedence` | AND binds tighter than OR: `a,b\|c` = `(a AND b) OR c`. |
|
|
113
113
|
|
|
114
114
|
The Rust SDK drives these fixtures in `sdk/core/src/lib.rs` (`query_conformance` module, closes [#788](https://github.com/adobe/spectrum-design-data/issues/788)).
|
|
115
|
+
|
|
116
|
+
***
|
|
117
|
+
|
|
118
|
+
## Manifest extensions conformance fixtures
|
|
119
|
+
|
|
120
|
+
Each **manifest-extensions** case lives under `manifest-extensions/valid/<name>/`
|
|
121
|
+
or `manifest-extensions/invalid/<name>/` with:
|
|
122
|
+
|
|
123
|
+
* `manifest.json` — a Layer 2 platform manifest (applied against the shared
|
|
124
|
+
`manifest-extensions/base/dataset.json` seed graph)
|
|
125
|
+
* an `extensions/` directory tree (or custom-named via `extensionsDir`) with
|
|
126
|
+
category subdirectories (`tokens/`, `components/`, `fields/`, `guidelines/`,
|
|
127
|
+
`platform-extensions/`, `relationships/`)
|
|
128
|
+
* `valid/` cases: `expected.json` — optional post-apply graph predicates
|
|
129
|
+
(relationship `byUuid`/`absent`, component/field/guideline `present`, token
|
|
130
|
+
`orderByUuid`); `{}` when the case only proves the manifest applies cleanly
|
|
131
|
+
* `invalid/` cases: `expected-errors.json` — `{ "errors": [{ "message_pattern": "..." }] }`,
|
|
132
|
+
every pattern regex-matched against the single returned error message
|
|
133
|
+
|
|
134
|
+
See [`manifest-extensions/README.md`](manifest-extensions/README.md) for the
|
|
135
|
+
full case table. The Rust SDK drives these fixtures in `sdk/core/src/lib.rs`
|
|
136
|
+
(`manifest_extensions_conformance` and `manifest_extensions_behavior` modules).
|
|
@@ -38,20 +38,20 @@ design-data migrate legacy-output <case>/input --output <case>/expected
|
|
|
38
38
|
| Case | What it exercises |
|
|
39
39
|
| ------------------ | ----------------------------------------------------------------------------------------------------------- |
|
|
40
40
|
| `flat-token` | Basic flat token conversion (property key derivation, field passthrough) |
|
|
41
|
-
| `mode-set-token` | Color-set reconstruction from per-mode cascade records (`
|
|
41
|
+
| `mode-set-token` | Color-set reconstruction from per-mode cascade records (`conceptId`/`set_schema`) |
|
|
42
42
|
| `deprecated-token` | `deprecated: "version"` string → `true` boolean; `deprecated_comment` passthrough; `plannedRemoval` dropped |
|
|
43
43
|
| `renamed-token` | `replaced_by: "<uuid>"` → `renamed: "<property-name>"` via global UUID→name map |
|
|
44
44
|
| `alias-rewire` | `$ref: "<uuid>"` → `value: "{<property-name>}"` (alias denormalization with UUID resolution) |
|
|
45
45
|
| `mode-set-edit` | `deprecated`/`renamed` hoisted to outer set level when consistent across all mode entries |
|
|
46
46
|
|
|
47
|
-
## Cascade grouping fields (`
|
|
47
|
+
## Cascade grouping fields (`conceptId` / `set_schema`)
|
|
48
48
|
|
|
49
49
|
The `mode-set-token` and `mode-set-edit` fixtures use two cascade-internal grouping fields:
|
|
50
50
|
|
|
51
|
-
| Field | Type | Role
|
|
52
|
-
| ------------ | ------ |
|
|
53
|
-
| `
|
|
54
|
-
| `set_schema` | string | The `$schema` URI of the aggregate set token emitted at the outer (non-mode-keyed) level in the legacy output (e.g. `color-set.json`).
|
|
51
|
+
| Field | Type | Role |
|
|
52
|
+
| ------------ | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
53
|
+
| `conceptId` | string | Canonical concept-level UUID shared by every mode row of a design concept. The SDK registers this as `conceptId → child-key list` in `sdk/core/src/graph.rs` and the legacy generator collapses all records sharing a `conceptId` into a single `sets`-keyed output object. |
|
|
54
|
+
| `set_schema` | string | The `$schema` URI of the aggregate set token emitted at the outer (non-mode-keyed) level in the legacy output (e.g. `color-set.json`). |
|
|
55
55
|
|
|
56
56
|
These fields are not yet in the normative token-format field table — they are Rust SDK
|
|
57
57
|
implementation fields defined in `sdk/core/src/graph.rs` and emitted by the cascade ingest
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"$schema": "https://opensource.adobe.com/spectrum-design-data/schemas/token-types/color.json",
|
|
10
10
|
"value": "rgb(20, 115, 230)",
|
|
11
11
|
"uuid": "11111111-0001-4000-8000-000000000001",
|
|
12
|
-
"
|
|
12
|
+
"conceptId": "11111111-0003-4000-8000-000000000003",
|
|
13
13
|
"set_schema": "https://opensource.adobe.com/spectrum-design-data/schemas/token-types/color-set.json",
|
|
14
14
|
"lifecycle": {
|
|
15
15
|
"deprecatedIn": true,
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"$schema": "https://opensource.adobe.com/spectrum-design-data/schemas/token-types/color.json",
|
|
27
27
|
"value": "rgb(56, 145, 254)",
|
|
28
28
|
"uuid": "11111111-0002-4000-8000-000000000002",
|
|
29
|
-
"
|
|
29
|
+
"conceptId": "11111111-0003-4000-8000-000000000003",
|
|
30
30
|
"set_schema": "https://opensource.adobe.com/spectrum-design-data/schemas/token-types/color-set.json",
|
|
31
31
|
"lifecycle": {
|
|
32
32
|
"deprecatedIn": true,
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"$schema": "https://opensource.adobe.com/spectrum-design-data/schemas/token-types/color.json",
|
|
39
39
|
"value": "rgb(20, 115, 230)",
|
|
40
40
|
"uuid": "11111111-0004-4000-8000-000000000004",
|
|
41
|
-
"
|
|
41
|
+
"conceptId": "11111111-0005-4000-8000-000000000005",
|
|
42
42
|
"set_schema": "https://opensource.adobe.com/spectrum-design-data/schemas/token-types/color-set.json"
|
|
43
43
|
}
|
|
44
44
|
]
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"$schema": "https://opensource.adobe.com/spectrum-design-data/schemas/token-types/color.json",
|
|
10
10
|
"value": "rgb(245, 249, 255)",
|
|
11
11
|
"uuid": "bbbbbbbb-0001-4000-8000-000000000001",
|
|
12
|
-
"
|
|
12
|
+
"conceptId": "cccccccc-0001-4000-8000-000000000001",
|
|
13
13
|
"set_schema": "https://opensource.adobe.com/spectrum-design-data/schemas/token-types/color-set.json",
|
|
14
14
|
"private": true
|
|
15
15
|
},
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"$schema": "https://opensource.adobe.com/spectrum-design-data/schemas/token-types/color.json",
|
|
24
24
|
"value": "rgb(14, 23, 63)",
|
|
25
25
|
"uuid": "bbbbbbbb-0002-4000-8000-000000000002",
|
|
26
|
-
"
|
|
26
|
+
"conceptId": "cccccccc-0001-4000-8000-000000000001",
|
|
27
27
|
"set_schema": "https://opensource.adobe.com/spectrum-design-data/schemas/token-types/color-set.json",
|
|
28
28
|
"private": true
|
|
29
29
|
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Manifest extensions conformance fixtures
|
|
2
|
+
|
|
3
|
+
Exercises the Layer 2 platform manifest's `extensions/` **directory** loader
|
|
4
|
+
(`packages/design-data-spec/spec/manifest.md#extensions-directory`): a sibling
|
|
5
|
+
`extensions/` tree (or a custom name via the manifest's `extensionsDir` field)
|
|
6
|
+
whose category subdirectories (`tokens/`, `components/`, `fields/`,
|
|
7
|
+
`guidelines/`, `platform-extensions/`, `relationships/`) are discovered,
|
|
8
|
+
glob+merged in sorted path order, per-fragment schema-validated, and spliced
|
|
9
|
+
into the manifest before it's applied to the graph.
|
|
10
|
+
|
|
11
|
+
* `base/dataset.json` — a shared minimal seed graph (three foundation tokens:
|
|
12
|
+
`btn-bg`, `btn-fg`, `chk-bg` on the `button`/`checkbox` components), loaded
|
|
13
|
+
once per case before that case's `manifest.json` is applied via
|
|
14
|
+
`apply_configured`.
|
|
15
|
+
* `valid/<case>/` — `manifest.json` + an `extensions/` (or custom-named) tree
|
|
16
|
+
that must apply cleanly. `expected.json` optionally carries behavior
|
|
17
|
+
predicates asserted against the post-apply graph:
|
|
18
|
+
```jsonc
|
|
19
|
+
{
|
|
20
|
+
"relationships": {
|
|
21
|
+
"byUuid": { "<uuid>": { "count": 1, "value": "8px" } },
|
|
22
|
+
"absent": ["<uuid>"]
|
|
23
|
+
},
|
|
24
|
+
"components": { "present": ["tab-bar-ios"] },
|
|
25
|
+
"fields": { "present": ["hapticStyle"] },
|
|
26
|
+
"guidelines": { "present": ["ios-haptics"] },
|
|
27
|
+
"tokens": { "orderByUuid": ["<uuid-1>", "<uuid-2>"] }
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
A case that only needs to prove "loads clean" uses `{}`.
|
|
31
|
+
* `invalid/<case>/` — `manifest.json` + tree that must fail `apply_configured`.
|
|
32
|
+
`expected-errors.json` is `{ "errors": [{ "message_pattern": "..." }] }`;
|
|
33
|
+
every pattern (regex) must match the single returned error message.
|
|
34
|
+
|
|
35
|
+
Rust SDK drives these fixtures in `sdk/core/src/lib.rs` via the
|
|
36
|
+
`manifest_extensions_conformance` (pass/fail + error message matching) and
|
|
37
|
+
`manifest_extensions_behavior` (post-apply graph predicates) test modules.
|
|
38
|
+
|
|
39
|
+
| Case | Intent |
|
|
40
|
+
| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
|
|
41
|
+
| `valid/injects-component` | A `components/` fragment is injected as a Platform-layer component. |
|
|
42
|
+
| `valid/injects-platform-extension` | A `platform-extensions/` fragment is injected. |
|
|
43
|
+
| `valid/injects-field` | A `fields/` fragment is injected. |
|
|
44
|
+
| `valid/injects-guideline` | A `guidelines/` fragment is injected. |
|
|
45
|
+
| `valid/injects-relationship` | A `relationships/` plain-add fragment is injected. |
|
|
46
|
+
| `valid/override-relationship-by-uuid` | An `op: "override"` entry replaces a plain add sharing its `uuid`, regardless of file sort order. |
|
|
47
|
+
| `valid/plain-add-uuid-collision-append` | Two plain adds sharing a `uuid` both append rather than one overwriting the other. |
|
|
48
|
+
| `valid/remove-relationship-by-uuid` | An `op: "remove"` entry deletes the matching relationship. |
|
|
49
|
+
| `valid/tokens-sorted-order` | Multiple `tokens/*.tokens.json` files concatenate in sorted path order. |
|
|
50
|
+
| `valid/later-file-wins` | Two `components/` fragments declaring the same component name dedupe to one, later file wins. |
|
|
51
|
+
| `valid/custom-extensions-dir` | The manifest's `extensionsDir` field is honored in place of the default `extensions/` name. |
|
|
52
|
+
| `valid/override-entry-skips-schema-validation` | An `op: "override"` relationship entry is not schema-validated against `relationship.schema.json` (only plain adds are). |
|
|
53
|
+
| `invalid/override-missing-uuid` | An `op: "override"` relationship entry missing `uuid` fails loudly. |
|
|
54
|
+
| `invalid/unknown-term-id` | A `platform-extensions/` fragment referencing a non-existent `termId` fails loudly. |
|
|
55
|
+
| `invalid/component-missing-name` | A `components/` fragment missing `name` fails Layer 1 fragment schema validation. |
|
|
56
|
+
| `invalid/field-invalid-kind` | A `fields/` fragment with an invalid `kind` enum value fails schema validation. |
|
|
57
|
+
| `invalid/guideline-invalid-category` | A `guidelines/` fragment with an invalid `category` enum value fails schema validation. |
|
|
58
|
+
| `invalid/platform-extension-missing-extends` | A `platform-extensions/` fragment missing `extends` fails schema validation. |
|
|
59
|
+
| `invalid/token-invalid-uuid` | A `tokens/*.tokens.json` fragment with a malformed `uuid` fails schema validation. |
|
|
60
|
+
| `invalid/relationship-missing-scope` | A `relationships/` plain-add fragment missing `scope` fails schema validation. |
|
|
61
|
+
| `invalid/extensions-dir-parent-traversal` | `extensionsDir` containing a `..` component is rejected. |
|
|
62
|
+
| `invalid/extensions-dir-absolute-path` | An absolute `extensionsDir` path is rejected. |
|
|
63
|
+
| `invalid/unknown-subdir-name` | An unrecognized subdirectory directly under `extensions/` (not one of the six known categories) is rejected by name. |
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tokens": [
|
|
3
|
+
{
|
|
4
|
+
"key": "btn-bg",
|
|
5
|
+
"name": { "property": "background-color", "component": "button" },
|
|
6
|
+
"value": "#aaa",
|
|
7
|
+
"uuid": "u-btn-bg"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"key": "btn-fg",
|
|
11
|
+
"name": { "property": "color", "component": "button" },
|
|
12
|
+
"value": "#111",
|
|
13
|
+
"uuid": "u-btn-fg"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"key": "chk-bg",
|
|
17
|
+
"name": { "property": "background-color", "component": "checkbox" },
|
|
18
|
+
"value": "#bbb",
|
|
19
|
+
"uuid": "u-chk-bg"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "displayName": "No name field" }
|
package/conformance/manifest-extensions/invalid/extensions-dir-absolute-path/expected-errors.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "errors": [{ "message_pattern": "extensionsDir" }] }
|
package/conformance/manifest-extensions/invalid/extensions-dir-parent-traversal/expected-errors.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "errors": [{ "message_pattern": "extensionsDir" }] }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "errors": [{ "message_pattern": "missing a \"uuid\"" }] }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "anything": true }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "errors": [{ "message_pattern": "not-a-real-state" }] }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "components": { "present": ["tab-bar-ios"] } }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "components": { "present": ["tab-bar-ios"] } }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "fields": { "present": ["hapticStyle"] } }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "guidelines": { "present": ["ios-haptics"] } }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "components": { "present": ["tab-bar-ios"] } }
|
package/conformance/manifest-extensions/valid/override-entry-skips-schema-validation/expected.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|