@cms0/cms0 0.0.9 → 0.0.11

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.
@@ -1,16 +1,113 @@
1
1
  import { Cms0APIConfig } from "@cms0/cms0/config";
2
- export type CmsInstance<Schema> = {
3
- [K in keyof Schema]: () => Promise<Schema[K]>;
2
+ import { schemaDescriptor } from "@cms0/cms0/schema-descriptors";
3
+ import { FullDescriptor } from "@cms0/shared";
4
+ type QueryValue = string | number | boolean | null | undefined;
5
+ type QueryParam = QueryValue | QueryValue[];
6
+ export type CmsQuery = Record<string, QueryParam>;
7
+ export type CmsResponseMode = "normalized" | "envelope" | "raw";
8
+ export interface CmsAccessorOptions {
9
+ query?: CmsQuery;
10
+ response?: CmsResponseMode;
11
+ includeId?: boolean;
12
+ resolveModelRefs?: boolean;
13
+ locale?: string;
14
+ signal?: AbortSignal;
15
+ }
16
+ export type CmsCollectionEnvelope<T> = {
17
+ items: T[];
18
+ total: number;
19
+ };
20
+ type CmsAccessorBaseOptions = Omit<CmsAccessorOptions, "includeId">;
21
+ type WithCollectionItemObjectIds<T> = T extends Array<infer Item> ? Array<Item extends object ? WithCollectionItemObjectIds<Item> & {
22
+ id: string;
23
+ } : Item> : T extends object ? {
24
+ [K in keyof T]: WithCollectionItemObjectIds<T[K]>;
25
+ } : T;
26
+ type WithAllObjectIds<T> = T extends Array<infer Item> ? Array<WithAllObjectIds<Item>> : T extends object ? {
27
+ id: string;
28
+ } & {
29
+ [K in keyof T]: WithAllObjectIds<T[K]>;
30
+ } : T;
31
+ export type CmsAccessor<T> = {
32
+ (options: CmsAccessorBaseOptions & {
33
+ includeId: true;
34
+ }): Promise<WithAllObjectIds<T>>;
35
+ (options: CmsAccessorBaseOptions & {
36
+ includeId: false;
37
+ }): Promise<T>;
38
+ (options?: CmsAccessorBaseOptions & {
39
+ includeId?: undefined;
40
+ }): Promise<WithCollectionItemObjectIds<T>>;
41
+ };
42
+ type CmsModelByIdAccessor<T> = {
43
+ (id: string, options: CmsAccessorBaseOptions & {
44
+ includeId: true;
45
+ }): Promise<WithAllObjectIds<T> | null>;
46
+ (id: string, options: CmsAccessorBaseOptions & {
47
+ includeId: false;
48
+ }): Promise<T | null>;
49
+ (id: string, options?: CmsAccessorBaseOptions & {
50
+ includeId?: undefined;
51
+ }): Promise<T | null>;
52
+ };
53
+ export type CmsModelAccessor<T> = CmsAccessor<T[]> & {
54
+ byId: CmsModelByIdAccessor<T>;
4
55
  };
56
+ export type CmsInstance<Roots, Models extends Record<string, any> = Record<string, never>> = {
57
+ [K in keyof Roots]: CmsAccessor<Roots[K]>;
58
+ } & {
59
+ models: {
60
+ [K in keyof Models]: CmsModelAccessor<Models[K]>;
61
+ } & Record<string, CmsModelAccessor<any>>;
62
+ } & Record<string, unknown>;
5
63
  export interface Cms0Options {
6
64
  apiConfig: Cms0APIConfig;
7
65
  locales?: string[];
8
66
  defaultLocale?: string;
9
67
  }
68
+ type PrimitiveValueFromDescriptor<TypeName extends string> = TypeName extends "string" ? string : TypeName extends "number" ? number : TypeName extends "boolean" ? boolean : any;
69
+ type ApplyDescriptorFlags<Descriptor, Value> = Descriptor extends {
70
+ optional: true;
71
+ nullable: true;
72
+ } ? Value | null | undefined : Descriptor extends {
73
+ optional: true;
74
+ } ? Value | undefined : Descriptor extends {
75
+ nullable: true;
76
+ } ? Value | null : Value;
77
+ type InferDescriptorObject<Properties extends Record<string, any>, ModelMap extends Record<string, any>> = {
78
+ [Key in keyof Properties]: InferDescriptorField<Properties[Key], ModelMap>;
79
+ };
80
+ type InferDescriptorField<Descriptor, ModelMap extends Record<string, any>> = ApplyDescriptorFlags<Descriptor, Descriptor extends {
81
+ kind: "modelRef";
82
+ model: infer ModelName extends string;
83
+ } ? ModelName extends keyof ModelMap ? ModelMap[ModelName] : string : Descriptor extends {
84
+ kind: "primitive";
85
+ type: infer Primitive extends string;
86
+ } ? PrimitiveValueFromDescriptor<Primitive> : Descriptor extends {
87
+ type: "array";
88
+ items: infer Items;
89
+ } ? Array<InferDescriptorField<Items, ModelMap>> : Descriptor extends {
90
+ type: "object";
91
+ properties: infer Properties extends Record<string, any>;
92
+ } ? InferDescriptorObject<Properties, ModelMap> : Descriptor extends {
93
+ type: infer Primitive extends string;
94
+ } ? PrimitiveValueFromDescriptor<Primitive> : any>;
95
+ type InferDescriptorModels<Models extends Record<string, any>> = {
96
+ [ModelName in keyof Models]: Models[ModelName] extends {
97
+ properties: infer Properties extends Record<string, any>;
98
+ } ? InferDescriptorObject<Properties, InferDescriptorModels<Models>> : any;
99
+ };
100
+ type InferDescriptorRoots<Roots extends Record<string, any>, Models extends Record<string, any>> = {
101
+ [RootKey in keyof Roots]: InferDescriptorField<Roots[RootKey], Models>;
102
+ };
103
+ type GeneratedModels = InferDescriptorModels<typeof schemaDescriptor.models>;
104
+ type GeneratedRoots = InferDescriptorRoots<typeof schemaDescriptor.roots, GeneratedModels>;
105
+ export declare function createCmsClient<Roots, Models extends Record<string, any> = Record<string, never>>(descriptor: FullDescriptor, config: Cms0Options): CmsInstance<Roots, Models>;
10
106
  /**
11
107
  * Initializes the CMS SDK for a given schema.
12
- * @param config configuration including API base URL or database URL.
13
- * @returns an object with typed accessors matching the schema.
108
+ * @param config configuration including API base URL and API key.
109
+ * @returns typed accessors for root resources and model resources.
14
110
  */
15
- export declare function cms0<Schema>(config: Cms0Options): CmsInstance<Schema>;
111
+ export declare function cms0<Roots = GeneratedRoots, Models extends Record<string, any> = GeneratedModels>(config: Cms0Options): CmsInstance<Roots, Models>;
112
+ export {};
16
113
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKlD,MAAM,MAAM,WAAW,CAAC,MAAM,IAAI;KAC/B,CAAC,IAAI,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAkDrE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cms0/cms0",
3
- "version": "0.0.9",
3
+ "version": "0.0.11",
4
4
  "description": "",
5
5
  "publishConfig": {
6
6
  "access": "restricted"
@@ -75,6 +75,7 @@
75
75
  "build:prepare": "pnpm -C ../shared build && node ./scripts/ensure-generated-schema-descriptor.cjs",
76
76
  "build:esm": "tsc -p tsconfig.json",
77
77
  "build:cjs": "tsc -p tsconfig.cjs.json",
78
- "build:finalize": "node ./finalize-build.cjs"
78
+ "build:finalize": "node ./finalize-build.cjs",
79
+ "test": "tsx --test test/**/*.test.ts"
79
80
  }
80
81
  }