@ankhorage/contracts 22.2.0 → 22.3.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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ankhorage/contracts
2
2
 
3
+ ## 22.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 1125463: Publish the generated ScreenRequirements structure root with canonical set semantics for permissions and capabilities.
8
+
3
9
  ## 22.2.0
4
10
 
5
11
  ### Minor Changes
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  # @ankhorage/contracts
5
5
 
6
- ![license: MIT](././paradox/badges/license.svg) ![npm: v22.2.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
6
+ ![license: MIT](././paradox/badges/license.svg) ![npm: v22.3.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
7
7
 
8
8
  Serializable app, action, theme, auth, and secret-store contracts for Ankhorage.
9
9
 
@@ -1,11 +1,12 @@
1
1
  export declare const STRUCTURE_DESCRIPTOR_COMPILER_VERSION = "6.0.3";
2
- export declare const STRUCTURE_DESCRIPTOR_FINGERPRINT = "sha256:be044f4aeb00c3790561556c7688623084944d3d85d860daedc7989ab5989cf6";
2
+ export declare const STRUCTURE_DESCRIPTOR_FINGERPRINT = "sha256:f75492e0533637806b7cac0bc9592e88be1239a46176124cfb6de95aff4285ed";
3
3
  export declare const STRUCTURE_DESCRIPTOR: {
4
4
  readonly protocolVersion: 1;
5
5
  readonly packageName: "@ankhorage/contracts";
6
- readonly packageVersion: "22.1.2";
6
+ readonly packageVersion: "22.2.0";
7
7
  readonly roots: {
8
8
  readonly "screen-metadata": "ScreenMetadataSpec";
9
+ readonly "screen-requirements": "ScreenRequirements";
9
10
  };
10
11
  readonly descriptors: {
11
12
  readonly ScreenMetadataSpec: {
@@ -42,6 +43,34 @@ export declare const STRUCTURE_DESCRIPTOR: {
42
43
  };
43
44
  };
44
45
  };
46
+ readonly ScreenRequirements: {
47
+ readonly id: "ScreenRequirements";
48
+ readonly descriptor: {
49
+ readonly kind: "object";
50
+ readonly fields: {
51
+ readonly capabilities: {
52
+ readonly value: {
53
+ readonly kind: "set";
54
+ readonly member: {
55
+ readonly kind: "enum";
56
+ readonly values: readonly ["barcodeScanner", "cameraPreview", "clipboard", "ebookReader", "filePicker", "location", "mediaPicker", "notifications"];
57
+ };
58
+ };
59
+ readonly optional: true;
60
+ };
61
+ readonly permissions: {
62
+ readonly value: {
63
+ readonly kind: "set";
64
+ readonly member: {
65
+ readonly kind: "enum";
66
+ readonly values: readonly ["camera", "clipboard", "locationBackground", "locationForeground", "mediaLibrary", "mediaLibraryWrite", "microphone", "notifications"];
67
+ };
68
+ };
69
+ readonly optional: true;
70
+ };
71
+ };
72
+ };
73
+ };
45
74
  };
46
75
  };
47
76
  //# sourceMappingURL=generated.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../src/structure/generated.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,qCAAqC,UAAU,CAAC;AAC7D,eAAO,MAAM,gCAAgC,4EAA4E,CAAC;AAE1H,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Ce,CAAC"}
1
+ {"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../src/structure/generated.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,qCAAqC,UAAU,CAAC;AAC7D,eAAO,MAAM,gCAAgC,4EAA4E,CAAC;AAE1H,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Fe,CAAC"}
@@ -1,11 +1,12 @@
1
1
  export const STRUCTURE_DESCRIPTOR_COMPILER_VERSION = '6.0.3';
2
- export const STRUCTURE_DESCRIPTOR_FINGERPRINT = 'sha256:be044f4aeb00c3790561556c7688623084944d3d85d860daedc7989ab5989cf6';
2
+ export const STRUCTURE_DESCRIPTOR_FINGERPRINT = 'sha256:f75492e0533637806b7cac0bc9592e88be1239a46176124cfb6de95aff4285ed';
3
3
  export const STRUCTURE_DESCRIPTOR = {
4
4
  "protocolVersion": 1,
5
5
  "packageName": "@ankhorage/contracts",
6
- "packageVersion": "22.1.2",
6
+ "packageVersion": "22.2.0",
7
7
  "roots": {
8
- "screen-metadata": "ScreenMetadataSpec"
8
+ "screen-metadata": "ScreenMetadataSpec",
9
+ "screen-requirements": "ScreenRequirements"
9
10
  },
10
11
  "descriptors": {
11
12
  "ScreenMetadataSpec": {
@@ -41,6 +42,52 @@ export const STRUCTURE_DESCRIPTOR = {
41
42
  }
42
43
  }
43
44
  }
45
+ },
46
+ "ScreenRequirements": {
47
+ "id": "ScreenRequirements",
48
+ "descriptor": {
49
+ "kind": "object",
50
+ "fields": {
51
+ "capabilities": {
52
+ "value": {
53
+ "kind": "set",
54
+ "member": {
55
+ "kind": "enum",
56
+ "values": [
57
+ "barcodeScanner",
58
+ "cameraPreview",
59
+ "clipboard",
60
+ "ebookReader",
61
+ "filePicker",
62
+ "location",
63
+ "mediaPicker",
64
+ "notifications"
65
+ ]
66
+ }
67
+ },
68
+ "optional": true
69
+ },
70
+ "permissions": {
71
+ "value": {
72
+ "kind": "set",
73
+ "member": {
74
+ "kind": "enum",
75
+ "values": [
76
+ "camera",
77
+ "clipboard",
78
+ "locationBackground",
79
+ "locationForeground",
80
+ "mediaLibrary",
81
+ "mediaLibraryWrite",
82
+ "microphone",
83
+ "notifications"
84
+ ]
85
+ }
86
+ },
87
+ "optional": true
88
+ }
89
+ }
90
+ }
44
91
  }
45
92
  }
46
93
  };
@@ -1 +1 @@
1
- {"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/structure/generated.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,qCAAqC,GAAG,OAAO,CAAC;AAC7D,MAAM,CAAC,MAAM,gCAAgC,GAAG,yEAAyE,CAAC;AAE1H,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,iBAAiB,EAAE,CAAC;IACpB,aAAa,EAAE,sBAAsB;IACrC,gBAAgB,EAAE,QAAQ;IAC1B,OAAO,EAAE;QACP,iBAAiB,EAAE,oBAAoB;KACxC;IACD,aAAa,EAAE;QACb,oBAAoB,EAAE;YACpB,IAAI,EAAE,oBAAoB;YAC1B,YAAY,EAAE;gBACZ,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE;oBACR,aAAa,EAAE;wBACb,OAAO,EAAE;4BACP,MAAM,EAAE,QAAQ;4BAChB,MAAM,EAAE,QAAQ;yBACjB;wBACD,UAAU,EAAE,IAAI;qBACjB;oBACD,IAAI,EAAE;wBACJ,OAAO,EAAE;4BACP,MAAM,EAAE,QAAQ;4BAChB,MAAM,EAAE,QAAQ;yBACjB;qBACF;oBACD,MAAM,EAAE;wBACN,OAAO,EAAE;4BACP,MAAM,EAAE,QAAQ;4BAChB,MAAM,EAAE,QAAQ;yBACjB;qBACF;oBACD,OAAO,EAAE;wBACP,OAAO,EAAE;4BACP,MAAM,EAAE,QAAQ;4BAChB,MAAM,EAAE,QAAQ;yBACjB;wBACD,UAAU,EAAE,IAAI;qBACjB;iBACF;aACF;SACF;KACF;CAC6C,CAAC","sourcesContent":["/* This file is generated by @ankhorage/devtools. Do not edit manually. */\nimport type { StructureDescriptorDocument } from '@ankhorage/contracts/structure';\n\nexport const STRUCTURE_DESCRIPTOR_COMPILER_VERSION = '6.0.3';\nexport const STRUCTURE_DESCRIPTOR_FINGERPRINT = 'sha256:be044f4aeb00c3790561556c7688623084944d3d85d860daedc7989ab5989cf6';\n\nexport const STRUCTURE_DESCRIPTOR = {\n \"protocolVersion\": 1,\n \"packageName\": \"@ankhorage/contracts\",\n \"packageVersion\": \"22.1.2\",\n \"roots\": {\n \"screen-metadata\": \"ScreenMetadataSpec\"\n },\n \"descriptors\": {\n \"ScreenMetadataSpec\": {\n \"id\": \"ScreenMetadataSpec\",\n \"descriptor\": {\n \"kind\": \"object\",\n \"fields\": {\n \"description\": {\n \"value\": {\n \"kind\": \"scalar\",\n \"type\": \"string\"\n },\n \"optional\": true\n },\n \"id\": {\n \"value\": {\n \"kind\": \"scalar\",\n \"type\": \"string\"\n }\n },\n \"name\": {\n \"value\": {\n \"kind\": \"scalar\",\n \"type\": \"string\"\n }\n },\n \"title\": {\n \"value\": {\n \"kind\": \"scalar\",\n \"type\": \"string\"\n },\n \"optional\": true\n }\n }\n }\n }\n }\n} as const satisfies StructureDescriptorDocument;\n"]}
1
+ {"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/structure/generated.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,qCAAqC,GAAG,OAAO,CAAC;AAC7D,MAAM,CAAC,MAAM,gCAAgC,GAAG,yEAAyE,CAAC;AAE1H,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,iBAAiB,EAAE,CAAC;IACpB,aAAa,EAAE,sBAAsB;IACrC,gBAAgB,EAAE,QAAQ;IAC1B,OAAO,EAAE;QACP,iBAAiB,EAAE,oBAAoB;QACvC,qBAAqB,EAAE,oBAAoB;KAC5C;IACD,aAAa,EAAE;QACb,oBAAoB,EAAE;YACpB,IAAI,EAAE,oBAAoB;YAC1B,YAAY,EAAE;gBACZ,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE;oBACR,aAAa,EAAE;wBACb,OAAO,EAAE;4BACP,MAAM,EAAE,QAAQ;4BAChB,MAAM,EAAE,QAAQ;yBACjB;wBACD,UAAU,EAAE,IAAI;qBACjB;oBACD,IAAI,EAAE;wBACJ,OAAO,EAAE;4BACP,MAAM,EAAE,QAAQ;4BAChB,MAAM,EAAE,QAAQ;yBACjB;qBACF;oBACD,MAAM,EAAE;wBACN,OAAO,EAAE;4BACP,MAAM,EAAE,QAAQ;4BAChB,MAAM,EAAE,QAAQ;yBACjB;qBACF;oBACD,OAAO,EAAE;wBACP,OAAO,EAAE;4BACP,MAAM,EAAE,QAAQ;4BAChB,MAAM,EAAE,QAAQ;yBACjB;wBACD,UAAU,EAAE,IAAI;qBACjB;iBACF;aACF;SACF;QACD,oBAAoB,EAAE;YACpB,IAAI,EAAE,oBAAoB;YAC1B,YAAY,EAAE;gBACZ,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE;oBACR,cAAc,EAAE;wBACd,OAAO,EAAE;4BACP,MAAM,EAAE,KAAK;4BACb,QAAQ,EAAE;gCACR,MAAM,EAAE,MAAM;gCACd,QAAQ,EAAE;oCACR,gBAAgB;oCAChB,eAAe;oCACf,WAAW;oCACX,aAAa;oCACb,YAAY;oCACZ,UAAU;oCACV,aAAa;oCACb,eAAe;iCAChB;6BACF;yBACF;wBACD,UAAU,EAAE,IAAI;qBACjB;oBACD,aAAa,EAAE;wBACb,OAAO,EAAE;4BACP,MAAM,EAAE,KAAK;4BACb,QAAQ,EAAE;gCACR,MAAM,EAAE,MAAM;gCACd,QAAQ,EAAE;oCACR,QAAQ;oCACR,WAAW;oCACX,oBAAoB;oCACpB,oBAAoB;oCACpB,cAAc;oCACd,mBAAmB;oCACnB,YAAY;oCACZ,eAAe;iCAChB;6BACF;yBACF;wBACD,UAAU,EAAE,IAAI;qBACjB;iBACF;aACF;SACF;KACF;CAC6C,CAAC","sourcesContent":["/* This file is generated by @ankhorage/devtools. Do not edit manually. */\nimport type { StructureDescriptorDocument } from '@ankhorage/contracts/structure';\n\nexport const STRUCTURE_DESCRIPTOR_COMPILER_VERSION = '6.0.3';\nexport const STRUCTURE_DESCRIPTOR_FINGERPRINT = 'sha256:f75492e0533637806b7cac0bc9592e88be1239a46176124cfb6de95aff4285ed';\n\nexport const STRUCTURE_DESCRIPTOR = {\n \"protocolVersion\": 1,\n \"packageName\": \"@ankhorage/contracts\",\n \"packageVersion\": \"22.2.0\",\n \"roots\": {\n \"screen-metadata\": \"ScreenMetadataSpec\",\n \"screen-requirements\": \"ScreenRequirements\"\n },\n \"descriptors\": {\n \"ScreenMetadataSpec\": {\n \"id\": \"ScreenMetadataSpec\",\n \"descriptor\": {\n \"kind\": \"object\",\n \"fields\": {\n \"description\": {\n \"value\": {\n \"kind\": \"scalar\",\n \"type\": \"string\"\n },\n \"optional\": true\n },\n \"id\": {\n \"value\": {\n \"kind\": \"scalar\",\n \"type\": \"string\"\n }\n },\n \"name\": {\n \"value\": {\n \"kind\": \"scalar\",\n \"type\": \"string\"\n }\n },\n \"title\": {\n \"value\": {\n \"kind\": \"scalar\",\n \"type\": \"string\"\n },\n \"optional\": true\n }\n }\n }\n },\n \"ScreenRequirements\": {\n \"id\": \"ScreenRequirements\",\n \"descriptor\": {\n \"kind\": \"object\",\n \"fields\": {\n \"capabilities\": {\n \"value\": {\n \"kind\": \"set\",\n \"member\": {\n \"kind\": \"enum\",\n \"values\": [\n \"barcodeScanner\",\n \"cameraPreview\",\n \"clipboard\",\n \"ebookReader\",\n \"filePicker\",\n \"location\",\n \"mediaPicker\",\n \"notifications\"\n ]\n }\n },\n \"optional\": true\n },\n \"permissions\": {\n \"value\": {\n \"kind\": \"set\",\n \"member\": {\n \"kind\": \"enum\",\n \"values\": [\n \"camera\",\n \"clipboard\",\n \"locationBackground\",\n \"locationForeground\",\n \"mediaLibrary\",\n \"mediaLibraryWrite\",\n \"microphone\",\n \"notifications\"\n ]\n }\n },\n \"optional\": true\n }\n }\n }\n }\n }\n} as const satisfies StructureDescriptorDocument;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ankhorage/contracts",
3
- "version": "22.2.0",
3
+ "version": "22.3.0",
4
4
  "main": "./dist/index.js",
5
5
  "ankh": {
6
6
  "category": "contracts",
@@ -14,6 +14,10 @@
14
14
  "screen-metadata": {
15
15
  "source": "src/types.ts",
16
16
  "export": "ScreenMetadataSpec"
17
+ },
18
+ "screen-requirements": {
19
+ "source": "src/requirements.ts",
20
+ "export": "ScreenRequirements"
17
21
  }
18
22
  }
19
23
  }
@@ -23,7 +27,7 @@
23
27
  "@ankhorage/utility": "^1.4.0"
24
28
  },
25
29
  "devDependencies": {
26
- "@ankhorage/devtools": "^1.18.4",
30
+ "@ankhorage/devtools": "^1.18.5",
27
31
  "@ankhorage/paradox": "^0.1.26",
28
32
  "@types/bun": "^1.4.1",
29
33
  "@types/node": "^25.2.3",
@@ -66,6 +66,10 @@ describe('contracts', () => {
66
66
  source: 'src/types.ts',
67
67
  export: 'ScreenMetadataSpec',
68
68
  },
69
+ 'screen-requirements': {
70
+ source: 'src/requirements.ts',
71
+ export: 'ScreenRequirements',
72
+ },
69
73
  },
70
74
  },
71
75
  } as const satisfies AnkhPackageMetadata;
@@ -0,0 +1,50 @@
1
+ import { expect, test } from 'bun:test';
2
+
3
+ import { STRUCTURE_DESCRIPTOR } from './structure';
4
+
5
+ test('publishes ScreenRequirements set semantics from the generated owner document', () => {
6
+ expect(STRUCTURE_DESCRIPTOR.roots['screen-requirements']).toBe('ScreenRequirements');
7
+ expect(STRUCTURE_DESCRIPTOR.descriptors.ScreenRequirements.descriptor).toEqual({
8
+ kind: 'object',
9
+ fields: {
10
+ capabilities: {
11
+ value: {
12
+ kind: 'set',
13
+ member: {
14
+ kind: 'enum',
15
+ values: [
16
+ 'barcodeScanner',
17
+ 'cameraPreview',
18
+ 'clipboard',
19
+ 'ebookReader',
20
+ 'filePicker',
21
+ 'location',
22
+ 'mediaPicker',
23
+ 'notifications',
24
+ ],
25
+ },
26
+ },
27
+ optional: true,
28
+ },
29
+ permissions: {
30
+ value: {
31
+ kind: 'set',
32
+ member: {
33
+ kind: 'enum',
34
+ values: [
35
+ 'camera',
36
+ 'clipboard',
37
+ 'locationBackground',
38
+ 'locationForeground',
39
+ 'mediaLibrary',
40
+ 'mediaLibraryWrite',
41
+ 'microphone',
42
+ 'notifications',
43
+ ],
44
+ },
45
+ },
46
+ optional: true,
47
+ },
48
+ },
49
+ });
50
+ });
@@ -2,14 +2,15 @@
2
2
  import type { StructureDescriptorDocument } from '@ankhorage/contracts/structure';
3
3
 
4
4
  export const STRUCTURE_DESCRIPTOR_COMPILER_VERSION = '6.0.3';
5
- export const STRUCTURE_DESCRIPTOR_FINGERPRINT = 'sha256:b0afb6c562efc3e866bcb65467aaa4ba673cd631f09fdbe9cb94f3324e852e66';
5
+ export const STRUCTURE_DESCRIPTOR_FINGERPRINT = 'sha256:2dffc16ee7d6af514cc25b9372065cb93c8b9ec5a848f5482f579913fed41b74';
6
6
 
7
7
  export const STRUCTURE_DESCRIPTOR = {
8
8
  "protocolVersion": 1,
9
9
  "packageName": "@ankhorage/contracts",
10
- "packageVersion": "22.2.0",
10
+ "packageVersion": "22.3.0",
11
11
  "roots": {
12
- "screen-metadata": "ScreenMetadataSpec"
12
+ "screen-metadata": "ScreenMetadataSpec",
13
+ "screen-requirements": "ScreenRequirements"
13
14
  },
14
15
  "descriptors": {
15
16
  "ScreenMetadataSpec": {
@@ -45,6 +46,52 @@ export const STRUCTURE_DESCRIPTOR = {
45
46
  }
46
47
  }
47
48
  }
49
+ },
50
+ "ScreenRequirements": {
51
+ "id": "ScreenRequirements",
52
+ "descriptor": {
53
+ "kind": "object",
54
+ "fields": {
55
+ "capabilities": {
56
+ "value": {
57
+ "kind": "set",
58
+ "member": {
59
+ "kind": "enum",
60
+ "values": [
61
+ "barcodeScanner",
62
+ "cameraPreview",
63
+ "clipboard",
64
+ "ebookReader",
65
+ "filePicker",
66
+ "location",
67
+ "mediaPicker",
68
+ "notifications"
69
+ ]
70
+ }
71
+ },
72
+ "optional": true
73
+ },
74
+ "permissions": {
75
+ "value": {
76
+ "kind": "set",
77
+ "member": {
78
+ "kind": "enum",
79
+ "values": [
80
+ "camera",
81
+ "clipboard",
82
+ "locationBackground",
83
+ "locationForeground",
84
+ "mediaLibrary",
85
+ "mediaLibraryWrite",
86
+ "microphone",
87
+ "notifications"
88
+ ]
89
+ }
90
+ },
91
+ "optional": true
92
+ }
93
+ }
94
+ }
48
95
  }
49
96
  }
50
97
  } as const satisfies StructureDescriptorDocument;