atom.io 0.9.0 → 0.9.2
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/data/dist/index.d.mts +6 -6
- package/data/dist/index.d.ts +6 -6
- package/data/dist/index.js.map +1 -1
- package/data/dist/index.mjs.map +1 -1
- package/data/src/struct-family.ts +11 -4
- package/data/src/struct.ts +17 -4
- package/package.json +1 -1
package/data/dist/index.d.mts
CHANGED
|
@@ -8,22 +8,22 @@ declare function dict<State, Key extends Json.Serializable>(findState: AtomIO.At
|
|
|
8
8
|
|
|
9
9
|
declare function struct<Struct extends {
|
|
10
10
|
[key: string]: unknown;
|
|
11
|
-
}>(options: {
|
|
12
|
-
key:
|
|
11
|
+
}, Key extends string>(options: {
|
|
12
|
+
key: Key;
|
|
13
13
|
default: Struct;
|
|
14
14
|
}, store?: Store): [
|
|
15
15
|
{
|
|
16
|
-
[K in keyof Struct]: AtomIO.AtomToken<Struct[K]>;
|
|
16
|
+
[K in keyof Struct as `${Key}${Capitalize<K & string>}State`]: AtomIO.AtomToken<Struct[K]>;
|
|
17
17
|
},
|
|
18
18
|
AtomIO.ReadonlySelectorToken<Struct>
|
|
19
19
|
];
|
|
20
20
|
|
|
21
|
-
declare function structFamily<Struct extends object>(options: {
|
|
22
|
-
key:
|
|
21
|
+
declare function structFamily<Struct extends object, Key extends string>(options: {
|
|
22
|
+
key: Key;
|
|
23
23
|
default: Struct;
|
|
24
24
|
}): [
|
|
25
25
|
{
|
|
26
|
-
[K in keyof Struct as `find${Capitalize<K & string>}`]: AtomIO.AtomFamily<string>;
|
|
26
|
+
[K in keyof Struct as `find${Capitalize<Key & string>}${Capitalize<K & string>}State`]: AtomIO.AtomFamily<Struct[K], string>;
|
|
27
27
|
},
|
|
28
28
|
AtomIO.ReadonlySelectorFamily<Struct>
|
|
29
29
|
];
|
package/data/dist/index.d.ts
CHANGED
|
@@ -8,22 +8,22 @@ declare function dict<State, Key extends Json.Serializable>(findState: AtomIO.At
|
|
|
8
8
|
|
|
9
9
|
declare function struct<Struct extends {
|
|
10
10
|
[key: string]: unknown;
|
|
11
|
-
}>(options: {
|
|
12
|
-
key:
|
|
11
|
+
}, Key extends string>(options: {
|
|
12
|
+
key: Key;
|
|
13
13
|
default: Struct;
|
|
14
14
|
}, store?: Store): [
|
|
15
15
|
{
|
|
16
|
-
[K in keyof Struct]: AtomIO.AtomToken<Struct[K]>;
|
|
16
|
+
[K in keyof Struct as `${Key}${Capitalize<K & string>}State`]: AtomIO.AtomToken<Struct[K]>;
|
|
17
17
|
},
|
|
18
18
|
AtomIO.ReadonlySelectorToken<Struct>
|
|
19
19
|
];
|
|
20
20
|
|
|
21
|
-
declare function structFamily<Struct extends object>(options: {
|
|
22
|
-
key:
|
|
21
|
+
declare function structFamily<Struct extends object, Key extends string>(options: {
|
|
22
|
+
key: Key;
|
|
23
23
|
default: Struct;
|
|
24
24
|
}): [
|
|
25
25
|
{
|
|
26
|
-
[K in keyof Struct as `find${Capitalize<K & string>}`]: AtomIO.AtomFamily<string>;
|
|
26
|
+
[K in keyof Struct as `find${Capitalize<Key & string>}${Capitalize<K & string>}State`]: AtomIO.AtomFamily<Struct[K], string>;
|
|
27
27
|
},
|
|
28
28
|
AtomIO.ReadonlySelectorFamily<Struct>
|
|
29
29
|
];
|
package/data/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dict.ts","../src/struct.ts","../src/struct-family.ts"],"names":["IMPLICIT","createSelector","capitalize"],"mappings":";AAEA,SAAS,UAAU,sBAAsB;AAGlC,SAAS,KACf,WAIA,OAIA,QAAe,SAAS,OAC2C;AACnE,SAAO;AAAA,IACN;AAAA,MACC,KAAK;AAAA,MACL,KAAK,CAAC,EAAE,IAAI,MAAM;AACjB,cAAM,OAAO,IAAI,KAAK;AACtB,eAAO,KAAK,OAAO,CAAC,KAAK,QAAQ;AAChC,cAAI,GAAG,IAAI,IAAI,UAAU,GAAG,CAAC;AAC7B,iBAAO;AAAA,QACR,GAAG,CAAC,CAAQ;AAAA,MACb;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;AC5BA,SAAS,YAAAA,iBAAgB;AAEzB,SAAS,YAAY,kBAAAC,uBAAsB;AAE3C,IAAM,aAAa,CAAC,QAAgB,IAAI,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAE/D,SAAS,
|
|
1
|
+
{"version":3,"sources":["../src/dict.ts","../src/struct.ts","../src/struct-family.ts"],"names":["IMPLICIT","createSelector","capitalize"],"mappings":";AAEA,SAAS,UAAU,sBAAsB;AAGlC,SAAS,KACf,WAIA,OAIA,QAAe,SAAS,OAC2C;AACnE,SAAO;AAAA,IACN;AAAA,MACC,KAAK;AAAA,MACL,KAAK,CAAC,EAAE,IAAI,MAAM;AACjB,cAAM,OAAO,IAAI,KAAK;AACtB,eAAO,KAAK,OAAO,CAAC,KAAK,QAAQ;AAChC,cAAI,GAAG,IAAI,IAAI,UAAU,GAAG,CAAC;AAC7B,iBAAO;AAAA,QACR,GAAG,CAAC,CAAQ;AAAA,MACb;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;AC5BA,SAAS,YAAAA,iBAAgB;AAEzB,SAAS,YAAY,kBAAAC,uBAAsB;AAE3C,IAAM,aAAa,CAAC,QAAgB,IAAI,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAE/D,SAAS,OAIf,SAIA,QAAeD,UAAS,OASvB;AACD,QAAM,QAKF,OAAO,KAAK,QAAQ,OAAO,EAAE,OAAO,CAAC,KAAK,QAAQ;AACrD,UAAM,WAAW,QAAQ,MAAM,WAAW,GAAG,IAAI;AACjD,QAAI,QAAQ,IAAI;AAAA,MACf;AAAA,QACC,KAAK,GAAG,QAAQ,GAAG,IAAI,GAAG;AAAA,QAC1B,SAAS,QAAQ,QAAQ,GAAG;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,IACD;AACA,WAAO;AAAA,EACR,GAAG,CAAC,CAAQ;AACZ,QAAM,cAAcC;AAAA,IACnB;AAAA,MACC,KAAK,QAAQ;AAAA,MACb,KAAK,CAAC,EAAE,IAAI,MAAM;AACjB,eAAO,OAAO,KAAK,QAAQ,OAAO,EAAE,OAAO,CAAC,KAAK,QAAQ;AACxD,cAAI,GAAG,IAAI,IAAI,MAAM,QAAQ,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC;AAC7D,iBAAO;AAAA,QACR,GAAG,CAAC,CAAQ;AAAA,MACb;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACA,SAAO,CAAC,OAAO,WAAW;AAC3B;;;ACxDA,SAAS,kBAAkB,4BAA4B;AAEvD,IAAMC,cAAa,CAAC,QAAgB,IAAI,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAE/D,SAAS,aAGd,SAWA;AACD,QAAM,QAKF,OAAO,KAAK,QAAQ,OAAO,EAAE,OAAO,CAAC,KAAK,QAAQ;AACrD,UAAM,iBACL,SAASA,YAAW,QAAQ,GAAG,IAAIA,YAAW,GAAG,IAAI;AACtD,QAAI,cAAc,IAAI,iBAAiB;AAAA,MACtC,KAAK,GAAG,QAAQ,GAAG,IAAI,GAAG;AAAA,MAC1B,SAAU,QAAQ,QAAgB,GAAG;AAAA,IACtC,CAAC;AACD,WAAO;AAAA,EACR,GAAG,CAAC,CAAQ;AACZ,QAAM,kBAAkB,qBAAqB;AAAA,IAC5C,KAAK,QAAQ;AAAA,IACb,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,MAAM;AACzB,aAAO,OAAO,KAAK,QAAQ,OAAO,EAAE,OAAO,CAAC,KAAK,QAAQ;AACxD,YAAI,GAAG,IAAI,IAAK,MAAc,GAAG,EAAE,EAAE,CAAC;AACtC,eAAO;AAAA,MACR,GAAG,CAAC,CAAQ;AAAA,IACb;AAAA,EACD,CAAC;AACD,SAAO,CAAC,OAAO,eAAe;AAC/B","sourcesContent":["import type * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { IMPLICIT, createSelector } from \"atom.io/internal\"\nimport type { Json, Stringified } from \"atom.io/json\"\n\nexport function dict<State, Key extends Json.Serializable>(\n\tfindState:\n\t\t| AtomIO.AtomFamily<State, Key>\n\t\t| AtomIO.ReadonlySelectorFamily<State, Key>\n\t\t| AtomIO.SelectorFamily<State, Key>,\n\tindex:\n\t\t| AtomIO.AtomToken<Key[]>\n\t\t| AtomIO.ReadonlySelectorToken<Key[]>\n\t\t| AtomIO.SelectorToken<Key[]>,\n\tstore: Store = IMPLICIT.STORE,\n): AtomIO.ReadonlySelectorToken<{ [K in Stringified<Key>]: State }> {\n\treturn createSelector(\n\t\t{\n\t\t\tkey: `dict`,\n\t\t\tget: ({ get }) => {\n\t\t\t\tconst keys = get(index)\n\t\t\t\treturn keys.reduce((acc, key) => {\n\t\t\t\t\tacc[key] = get(findState(key))\n\t\t\t\t\treturn acc\n\t\t\t\t}, {} as any)\n\t\t\t},\n\t\t},\n\t\tundefined,\n\t\tstore,\n\t)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { IMPLICIT } from \"atom.io/internal\"\n\nimport { createAtom, createSelector } from \"atom.io/internal\"\n\nconst capitalize = (str: string) => str[0].toUpperCase() + str.slice(1)\n\nexport function struct<\n\tStruct extends { [key: string]: unknown },\n\tKey extends string,\n>(\n\toptions: {\n\t\tkey: Key\n\t\tdefault: Struct\n\t},\n\tstore: Store = IMPLICIT.STORE,\n): [\n\t{\n\t\t[K in\n\t\t\tkeyof Struct as `${Key}${Capitalize<K & string>}State`]: AtomIO.AtomToken<\n\t\t\tStruct[K]\n\t\t>\n\t},\n\tAtomIO.ReadonlySelectorToken<Struct>,\n] {\n\tconst atoms: {\n\t\t[K in\n\t\t\tkeyof Struct as `${Key}${Capitalize<K & string>}State`]: AtomIO.AtomToken<\n\t\t\tStruct[K]\n\t\t>\n\t} = Object.keys(options.default).reduce((acc, key) => {\n\t\tconst atomName = options.key + capitalize(key) + `State`\n\t\tacc[atomName] = createAtom(\n\t\t\t{\n\t\t\t\tkey: `${options.key}.${key}`,\n\t\t\t\tdefault: options.default[key],\n\t\t\t},\n\t\t\tundefined,\n\t\t\tstore,\n\t\t)\n\t\treturn acc\n\t}, {} as any)\n\tconst structState = createSelector(\n\t\t{\n\t\t\tkey: options.key,\n\t\t\tget: ({ get }) => {\n\t\t\t\treturn Object.keys(options.default).reduce((acc, key) => {\n\t\t\t\t\tacc[key] = get(atoms[options.key + capitalize(key) + `State`])\n\t\t\t\t\treturn acc\n\t\t\t\t}, {} as any)\n\t\t\t},\n\t\t},\n\t\tundefined,\n\t\tstore,\n\t)\n\treturn [atoms, structState]\n}\n","import type * as AtomIO from \"atom.io\"\nimport { createAtomFamily, createSelectorFamily } from \"atom.io/internal\"\n\nconst capitalize = (str: string) => str[0].toUpperCase() + str.slice(1)\n\nexport function structFamily<\n\tStruct extends object,\n\tKey extends string,\n>(options: {\n\tkey: Key\n\tdefault: Struct\n}): [\n\t{\n\t\t[K in\n\t\t\tkeyof Struct as `find${Capitalize<Key & string>}${Capitalize<\n\t\t\t\tK & string\n\t\t\t>}State`]: AtomIO.AtomFamily<Struct[K], string>\n\t},\n\tAtomIO.ReadonlySelectorFamily<Struct>,\n] {\n\tconst atoms: {\n\t\t[K in\n\t\t\tkeyof Struct as `find${Capitalize<Key & string>}${Capitalize<\n\t\t\t\tK & string\n\t\t\t>}State`]: AtomIO.AtomFamily<Struct[K], string>\n\t} = Object.keys(options.default).reduce((acc, key) => {\n\t\tconst atomFamilyName =\n\t\t\t`find` + capitalize(options.key) + capitalize(key) + `State`\n\t\tacc[atomFamilyName] = createAtomFamily({\n\t\t\tkey: `${options.key}.${key}`,\n\t\t\tdefault: (options.default as any)[key],\n\t\t})\n\t\treturn acc\n\t}, {} as any)\n\tconst findStructState = createSelectorFamily({\n\t\tkey: options.key,\n\t\tget: (id) => ({ get }) => {\n\t\t\treturn Object.keys(options.default).reduce((acc, key) => {\n\t\t\t\tacc[key] = get((atoms as any)[key](id))\n\t\t\t\treturn acc\n\t\t\t}, {} as any)\n\t\t},\n\t})\n\treturn [atoms, findStructState]\n}\n"]}
|
package/data/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dict.ts","../src/struct.ts","../src/struct-family.ts"],"names":["IMPLICIT","createSelector","capitalize"],"mappings":";AAEA,SAAS,UAAU,sBAAsB;AAGlC,SAAS,KACf,WAIA,OAIA,QAAe,SAAS,OAC2C;AACnE,SAAO;AAAA,IACN;AAAA,MACC,KAAK;AAAA,MACL,KAAK,CAAC,EAAE,IAAI,MAAM;AACjB,cAAM,OAAO,IAAI,KAAK;AACtB,eAAO,KAAK,OAAO,CAAC,KAAK,QAAQ;AAChC,cAAI,GAAG,IAAI,IAAI,UAAU,GAAG,CAAC;AAC7B,iBAAO;AAAA,QACR,GAAG,CAAC,CAAQ;AAAA,MACb;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;AC5BA,SAAS,YAAAA,iBAAgB;AAEzB,SAAS,YAAY,kBAAAC,uBAAsB;AAE3C,IAAM,aAAa,CAAC,QAAgB,IAAI,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAE/D,SAAS,
|
|
1
|
+
{"version":3,"sources":["../src/dict.ts","../src/struct.ts","../src/struct-family.ts"],"names":["IMPLICIT","createSelector","capitalize"],"mappings":";AAEA,SAAS,UAAU,sBAAsB;AAGlC,SAAS,KACf,WAIA,OAIA,QAAe,SAAS,OAC2C;AACnE,SAAO;AAAA,IACN;AAAA,MACC,KAAK;AAAA,MACL,KAAK,CAAC,EAAE,IAAI,MAAM;AACjB,cAAM,OAAO,IAAI,KAAK;AACtB,eAAO,KAAK,OAAO,CAAC,KAAK,QAAQ;AAChC,cAAI,GAAG,IAAI,IAAI,UAAU,GAAG,CAAC;AAC7B,iBAAO;AAAA,QACR,GAAG,CAAC,CAAQ;AAAA,MACb;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;AC5BA,SAAS,YAAAA,iBAAgB;AAEzB,SAAS,YAAY,kBAAAC,uBAAsB;AAE3C,IAAM,aAAa,CAAC,QAAgB,IAAI,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAE/D,SAAS,OAIf,SAIA,QAAeD,UAAS,OASvB;AACD,QAAM,QAKF,OAAO,KAAK,QAAQ,OAAO,EAAE,OAAO,CAAC,KAAK,QAAQ;AACrD,UAAM,WAAW,QAAQ,MAAM,WAAW,GAAG,IAAI;AACjD,QAAI,QAAQ,IAAI;AAAA,MACf;AAAA,QACC,KAAK,GAAG,QAAQ,GAAG,IAAI,GAAG;AAAA,QAC1B,SAAS,QAAQ,QAAQ,GAAG;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,IACD;AACA,WAAO;AAAA,EACR,GAAG,CAAC,CAAQ;AACZ,QAAM,cAAcC;AAAA,IACnB;AAAA,MACC,KAAK,QAAQ;AAAA,MACb,KAAK,CAAC,EAAE,IAAI,MAAM;AACjB,eAAO,OAAO,KAAK,QAAQ,OAAO,EAAE,OAAO,CAAC,KAAK,QAAQ;AACxD,cAAI,GAAG,IAAI,IAAI,MAAM,QAAQ,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC;AAC7D,iBAAO;AAAA,QACR,GAAG,CAAC,CAAQ;AAAA,MACb;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACA,SAAO,CAAC,OAAO,WAAW;AAC3B;;;ACxDA,SAAS,kBAAkB,4BAA4B;AAEvD,IAAMC,cAAa,CAAC,QAAgB,IAAI,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAE/D,SAAS,aAGd,SAWA;AACD,QAAM,QAKF,OAAO,KAAK,QAAQ,OAAO,EAAE,OAAO,CAAC,KAAK,QAAQ;AACrD,UAAM,iBACL,SAASA,YAAW,QAAQ,GAAG,IAAIA,YAAW,GAAG,IAAI;AACtD,QAAI,cAAc,IAAI,iBAAiB;AAAA,MACtC,KAAK,GAAG,QAAQ,GAAG,IAAI,GAAG;AAAA,MAC1B,SAAU,QAAQ,QAAgB,GAAG;AAAA,IACtC,CAAC;AACD,WAAO;AAAA,EACR,GAAG,CAAC,CAAQ;AACZ,QAAM,kBAAkB,qBAAqB;AAAA,IAC5C,KAAK,QAAQ;AAAA,IACb,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,MAAM;AACzB,aAAO,OAAO,KAAK,QAAQ,OAAO,EAAE,OAAO,CAAC,KAAK,QAAQ;AACxD,YAAI,GAAG,IAAI,IAAK,MAAc,GAAG,EAAE,EAAE,CAAC;AACtC,eAAO;AAAA,MACR,GAAG,CAAC,CAAQ;AAAA,IACb;AAAA,EACD,CAAC;AACD,SAAO,CAAC,OAAO,eAAe;AAC/B","sourcesContent":["import type * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { IMPLICIT, createSelector } from \"atom.io/internal\"\nimport type { Json, Stringified } from \"atom.io/json\"\n\nexport function dict<State, Key extends Json.Serializable>(\n\tfindState:\n\t\t| AtomIO.AtomFamily<State, Key>\n\t\t| AtomIO.ReadonlySelectorFamily<State, Key>\n\t\t| AtomIO.SelectorFamily<State, Key>,\n\tindex:\n\t\t| AtomIO.AtomToken<Key[]>\n\t\t| AtomIO.ReadonlySelectorToken<Key[]>\n\t\t| AtomIO.SelectorToken<Key[]>,\n\tstore: Store = IMPLICIT.STORE,\n): AtomIO.ReadonlySelectorToken<{ [K in Stringified<Key>]: State }> {\n\treturn createSelector(\n\t\t{\n\t\t\tkey: `dict`,\n\t\t\tget: ({ get }) => {\n\t\t\t\tconst keys = get(index)\n\t\t\t\treturn keys.reduce((acc, key) => {\n\t\t\t\t\tacc[key] = get(findState(key))\n\t\t\t\t\treturn acc\n\t\t\t\t}, {} as any)\n\t\t\t},\n\t\t},\n\t\tundefined,\n\t\tstore,\n\t)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { IMPLICIT } from \"atom.io/internal\"\n\nimport { createAtom, createSelector } from \"atom.io/internal\"\n\nconst capitalize = (str: string) => str[0].toUpperCase() + str.slice(1)\n\nexport function struct<\n\tStruct extends { [key: string]: unknown },\n\tKey extends string,\n>(\n\toptions: {\n\t\tkey: Key\n\t\tdefault: Struct\n\t},\n\tstore: Store = IMPLICIT.STORE,\n): [\n\t{\n\t\t[K in\n\t\t\tkeyof Struct as `${Key}${Capitalize<K & string>}State`]: AtomIO.AtomToken<\n\t\t\tStruct[K]\n\t\t>\n\t},\n\tAtomIO.ReadonlySelectorToken<Struct>,\n] {\n\tconst atoms: {\n\t\t[K in\n\t\t\tkeyof Struct as `${Key}${Capitalize<K & string>}State`]: AtomIO.AtomToken<\n\t\t\tStruct[K]\n\t\t>\n\t} = Object.keys(options.default).reduce((acc, key) => {\n\t\tconst atomName = options.key + capitalize(key) + `State`\n\t\tacc[atomName] = createAtom(\n\t\t\t{\n\t\t\t\tkey: `${options.key}.${key}`,\n\t\t\t\tdefault: options.default[key],\n\t\t\t},\n\t\t\tundefined,\n\t\t\tstore,\n\t\t)\n\t\treturn acc\n\t}, {} as any)\n\tconst structState = createSelector(\n\t\t{\n\t\t\tkey: options.key,\n\t\t\tget: ({ get }) => {\n\t\t\t\treturn Object.keys(options.default).reduce((acc, key) => {\n\t\t\t\t\tacc[key] = get(atoms[options.key + capitalize(key) + `State`])\n\t\t\t\t\treturn acc\n\t\t\t\t}, {} as any)\n\t\t\t},\n\t\t},\n\t\tundefined,\n\t\tstore,\n\t)\n\treturn [atoms, structState]\n}\n","import type * as AtomIO from \"atom.io\"\nimport { createAtomFamily, createSelectorFamily } from \"atom.io/internal\"\n\nconst capitalize = (str: string) => str[0].toUpperCase() + str.slice(1)\n\nexport function structFamily<\n\tStruct extends object,\n\tKey extends string,\n>(options: {\n\tkey: Key\n\tdefault: Struct\n}): [\n\t{\n\t\t[K in\n\t\t\tkeyof Struct as `find${Capitalize<Key & string>}${Capitalize<\n\t\t\t\tK & string\n\t\t\t>}State`]: AtomIO.AtomFamily<Struct[K], string>\n\t},\n\tAtomIO.ReadonlySelectorFamily<Struct>,\n] {\n\tconst atoms: {\n\t\t[K in\n\t\t\tkeyof Struct as `find${Capitalize<Key & string>}${Capitalize<\n\t\t\t\tK & string\n\t\t\t>}State`]: AtomIO.AtomFamily<Struct[K], string>\n\t} = Object.keys(options.default).reduce((acc, key) => {\n\t\tconst atomFamilyName =\n\t\t\t`find` + capitalize(options.key) + capitalize(key) + `State`\n\t\tacc[atomFamilyName] = createAtomFamily({\n\t\t\tkey: `${options.key}.${key}`,\n\t\t\tdefault: (options.default as any)[key],\n\t\t})\n\t\treturn acc\n\t}, {} as any)\n\tconst findStructState = createSelectorFamily({\n\t\tkey: options.key,\n\t\tget: (id) => ({ get }) => {\n\t\t\treturn Object.keys(options.default).reduce((acc, key) => {\n\t\t\t\tacc[key] = get((atoms as any)[key](id))\n\t\t\t\treturn acc\n\t\t\t}, {} as any)\n\t\t},\n\t})\n\treturn [atoms, findStructState]\n}\n"]}
|
|
@@ -3,19 +3,26 @@ import { createAtomFamily, createSelectorFamily } from "atom.io/internal"
|
|
|
3
3
|
|
|
4
4
|
const capitalize = (str: string) => str[0].toUpperCase() + str.slice(1)
|
|
5
5
|
|
|
6
|
-
export function structFamily<
|
|
7
|
-
|
|
6
|
+
export function structFamily<
|
|
7
|
+
Struct extends object,
|
|
8
|
+
Key extends string,
|
|
9
|
+
>(options: {
|
|
10
|
+
key: Key
|
|
8
11
|
default: Struct
|
|
9
12
|
}): [
|
|
10
13
|
{
|
|
11
14
|
[K in
|
|
12
|
-
keyof Struct as `find${Capitalize<
|
|
15
|
+
keyof Struct as `find${Capitalize<Key & string>}${Capitalize<
|
|
16
|
+
K & string
|
|
17
|
+
>}State`]: AtomIO.AtomFamily<Struct[K], string>
|
|
13
18
|
},
|
|
14
19
|
AtomIO.ReadonlySelectorFamily<Struct>,
|
|
15
20
|
] {
|
|
16
21
|
const atoms: {
|
|
17
22
|
[K in
|
|
18
|
-
keyof Struct as `find${Capitalize<
|
|
23
|
+
keyof Struct as `find${Capitalize<Key & string>}${Capitalize<
|
|
24
|
+
K & string
|
|
25
|
+
>}State`]: AtomIO.AtomFamily<Struct[K], string>
|
|
19
26
|
} = Object.keys(options.default).reduce((acc, key) => {
|
|
20
27
|
const atomFamilyName =
|
|
21
28
|
`find` + capitalize(options.key) + capitalize(key) + `State`
|
package/data/src/struct.ts
CHANGED
|
@@ -6,17 +6,30 @@ import { createAtom, createSelector } from "atom.io/internal"
|
|
|
6
6
|
|
|
7
7
|
const capitalize = (str: string) => str[0].toUpperCase() + str.slice(1)
|
|
8
8
|
|
|
9
|
-
export function struct<
|
|
9
|
+
export function struct<
|
|
10
|
+
Struct extends { [key: string]: unknown },
|
|
11
|
+
Key extends string,
|
|
12
|
+
>(
|
|
10
13
|
options: {
|
|
11
|
-
key:
|
|
14
|
+
key: Key
|
|
12
15
|
default: Struct
|
|
13
16
|
},
|
|
14
17
|
store: Store = IMPLICIT.STORE,
|
|
15
18
|
): [
|
|
16
|
-
{
|
|
19
|
+
{
|
|
20
|
+
[K in
|
|
21
|
+
keyof Struct as `${Key}${Capitalize<K & string>}State`]: AtomIO.AtomToken<
|
|
22
|
+
Struct[K]
|
|
23
|
+
>
|
|
24
|
+
},
|
|
17
25
|
AtomIO.ReadonlySelectorToken<Struct>,
|
|
18
26
|
] {
|
|
19
|
-
const atoms
|
|
27
|
+
const atoms: {
|
|
28
|
+
[K in
|
|
29
|
+
keyof Struct as `${Key}${Capitalize<K & string>}State`]: AtomIO.AtomToken<
|
|
30
|
+
Struct[K]
|
|
31
|
+
>
|
|
32
|
+
} = Object.keys(options.default).reduce((acc, key) => {
|
|
20
33
|
const atomName = options.key + capitalize(key) + `State`
|
|
21
34
|
acc[atomName] = createAtom(
|
|
22
35
|
{
|