@voxgig/sdkgen 0.32.2 → 0.33.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.
Files changed (56) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/cmp/Readme.js +10 -0
  3. package/dist/cmp/Readme.js.map +1 -1
  4. package/dist/cmp/ReadmeEntity.js +91 -8
  5. package/dist/cmp/ReadmeEntity.js.map +1 -1
  6. package/dist/cmp/ReadmeIntro.js +24 -2
  7. package/dist/cmp/ReadmeIntro.js.map +1 -1
  8. package/dist/cmp/ReadmeModel.js +93 -16
  9. package/dist/cmp/ReadmeModel.js.map +1 -1
  10. package/dist/cmp/ReadmeOptions.js +30 -5
  11. package/dist/cmp/ReadmeOptions.js.map +1 -1
  12. package/dist/cmp/ReadmeRef.d.ts +2 -0
  13. package/dist/cmp/ReadmeRef.js +334 -0
  14. package/dist/cmp/ReadmeRef.js.map +1 -0
  15. package/dist/sdkgen.d.ts +2 -1
  16. package/dist/sdkgen.js +3 -1
  17. package/dist/sdkgen.js.map +1 -1
  18. package/dist/tsconfig.tsbuildinfo +1 -1
  19. package/package.json +2 -3
  20. package/project/.sdk/src/cmp/go/TestDirect_go.ts +2 -2
  21. package/project/.sdk/src/cmp/go/TestEntity_go.ts +3 -3
  22. package/project/.sdk/src/cmp/js/Config_js.ts +62 -23
  23. package/project/.sdk/src/cmp/js/EntityOperation_js.ts +49 -0
  24. package/project/.sdk/src/cmp/js/Entity_js.ts +21 -50
  25. package/project/.sdk/src/cmp/js/MainEntity_js.ts +1 -1
  26. package/project/.sdk/src/cmp/js/Main_js.ts +53 -44
  27. package/project/.sdk/src/cmp/js/Package_js.ts +39 -12
  28. package/project/.sdk/src/cmp/js/Quick_js.ts +6 -10
  29. package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +101 -5
  30. package/project/.sdk/src/cmp/js/SdkError_js.ts +42 -0
  31. package/project/.sdk/src/cmp/js/TestDirect_js.ts +288 -0
  32. package/project/.sdk/src/cmp/js/TestEntity_js.ts +352 -2
  33. package/project/.sdk/src/cmp/js/TestMain_js.ts +0 -3
  34. package/project/.sdk/src/cmp/js/Test_js.ts +20 -8
  35. package/project/.sdk/src/cmp/js/fragment/Config.fragment.js +55 -0
  36. package/project/.sdk/src/cmp/js/fragment/Direct.test.fragment.js +30 -0
  37. package/project/.sdk/src/cmp/js/fragment/Entity.fragment.js +119 -28
  38. package/project/.sdk/src/cmp/js/fragment/Entity.test.fragment.js +39 -0
  39. package/project/.sdk/src/cmp/js/fragment/EntityCreateOp.fragment.js +89 -45
  40. package/project/.sdk/src/cmp/js/fragment/EntityListOp.fragment.js +92 -41
  41. package/project/.sdk/src/cmp/js/fragment/EntityLoadOp.fragment.js +95 -45
  42. package/project/.sdk/src/cmp/js/fragment/EntityRemoveOp.fragment.js +95 -43
  43. package/project/.sdk/src/cmp/js/fragment/EntityUpdateOp.fragment.js +95 -43
  44. package/project/.sdk/src/cmp/js/fragment/Main.fragment.js +150 -65
  45. package/project/.sdk/src/cmp/js/fragment/SdkError.fragment.js +22 -0
  46. package/project/.sdk/src/cmp/js/utility_js.ts +64 -0
  47. package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +102 -5
  48. package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +2 -2
  49. package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +11 -8
  50. package/src/cmp/Readme.ts +12 -0
  51. package/src/cmp/ReadmeEntity.ts +105 -9
  52. package/src/cmp/ReadmeIntro.ts +30 -2
  53. package/src/cmp/ReadmeModel.ts +101 -18
  54. package/src/cmp/ReadmeOptions.ts +35 -6
  55. package/src/cmp/ReadmeRef.ts +369 -0
  56. package/src/sdkgen.ts +2 -0
package/bin/voxgig-sdkgen CHANGED
@@ -8,7 +8,7 @@ const { Gubu, Fault, One } = require('gubu')
8
8
 
9
9
  const { SdkGen } = require('../dist/sdkgen.js')
10
10
 
11
- const VERSION = '0.32.2'
11
+ const VERSION = '0.33.0'
12
12
  const KONSOLE = console
13
13
 
14
14
 
@@ -8,6 +8,7 @@ const ReadmeQuick_1 = require("./ReadmeQuick");
8
8
  const ReadmeModel_1 = require("./ReadmeModel");
9
9
  const ReadmeOptions_1 = require("./ReadmeOptions");
10
10
  const ReadmeEntity_1 = require("./ReadmeEntity");
11
+ const ReadmeRef_1 = require("./ReadmeRef");
11
12
  const Readme = (0, jostraca_1.cmp)(function Readme(props) {
12
13
  const { target } = props;
13
14
  const { model } = props.ctx$;
@@ -22,7 +23,16 @@ const Readme = (0, jostraca_1.cmp)(function Readme(props) {
22
23
  (0, ReadmeModel_1.ReadmeModel)({ target });
23
24
  (0, ReadmeOptions_1.ReadmeOptions)({ target });
24
25
  (0, ReadmeEntity_1.ReadmeEntity)({ target });
26
+ (0, jostraca_1.Content)(`
27
+ ## Reference
28
+
29
+ See [REFERENCE.md](REFERENCE.md) for complete API reference
30
+ documentation including all method signatures, entity field schemas,
31
+ and detailed usage examples.
32
+ `);
25
33
  });
34
+ // Generate separate reference documentation
35
+ (0, ReadmeRef_1.ReadmeRef)({ target });
26
36
  });
27
37
  exports.Readme = Readme;
28
38
  //# sourceMappingURL=Readme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Readme.js","sourceRoot":"","sources":["../../src/cmp/Readme.ts"],"names":[],"mappings":";;;AACA,uCAA6C;AAG7C,+CAA2C;AAC3C,mDAA+C;AAC/C,+CAA2C;AAC3C,+CAA2C;AAC3C,mDAA+C;AAC/C,iDAA6C;AAG7C,MAAM,MAAM,GAAG,IAAA,cAAG,EAAC,SAAS,MAAM,CAAC,KAAU;IAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IACxB,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,CAAA;IAE5B,IAAA,eAAI,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE;QAE/B,IAAA,kBAAO,EAAC;IACR,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK;CAC7B,CAAC,CAAA;QACE,WAAW;QACX,IAAA,yBAAW,EAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACvB,IAAA,6BAAa,EAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACzB,IAAA,yBAAW,EAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACvB,IAAA,yBAAW,EAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACvB,IAAA,6BAAa,EAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACzB,IAAA,2BAAY,EAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAIA,wBAAM"}
1
+ {"version":3,"file":"Readme.js","sourceRoot":"","sources":["../../src/cmp/Readme.ts"],"names":[],"mappings":";;;AACA,uCAA6C;AAG7C,+CAA2C;AAC3C,mDAA+C;AAC/C,+CAA2C;AAC3C,+CAA2C;AAC3C,mDAA+C;AAC/C,iDAA6C;AAC7C,2CAAuC;AAGvC,MAAM,MAAM,GAAG,IAAA,cAAG,EAAC,SAAS,MAAM,CAAC,KAAU;IAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IACxB,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,CAAA;IAE5B,IAAA,eAAI,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE;QAE/B,IAAA,kBAAO,EAAC;IACR,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK;CAC7B,CAAC,CAAA;QACE,WAAW;QACX,IAAA,yBAAW,EAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACvB,IAAA,6BAAa,EAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACzB,IAAA,yBAAW,EAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACvB,IAAA,yBAAW,EAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACvB,IAAA,6BAAa,EAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACzB,IAAA,2BAAY,EAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QAExB,IAAA,kBAAO,EAAC;;;;;;CAMX,CAAC,CAAA;IACA,CAAC,CAAC,CAAA;IAEF,4CAA4C;IAC5C,IAAA,qBAAS,EAAC,EAAE,MAAM,EAAE,CAAC,CAAA;AACvB,CAAC,CAAC,CAAA;AAIA,wBAAM"}
@@ -3,26 +3,109 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ReadmeEntity = void 0;
4
4
  const jostraca_1 = require("jostraca");
5
5
  const types_1 = require("../types");
6
+ const OP_DESC = {
7
+ load: { method: 'load(match)', desc: 'Load a single entity by match criteria.' },
8
+ list: { method: 'list(match)', desc: 'List entities matching the criteria.' },
9
+ create: { method: 'create(data)', desc: 'Create a new entity with the given data.' },
10
+ update: { method: 'update(data)', desc: 'Update an existing entity.' },
11
+ remove: { method: 'remove(match)', desc: 'Remove the matching entity.' },
12
+ };
6
13
  const ReadmeEntity = (0, jostraca_1.cmp)(function ReadmeEntity(props) {
7
14
  const { ctx$: { model } } = props;
8
15
  const entity = (0, types_1.getModelPath)(model, `main.${types_1.KIT}.entity`);
16
+ const publishedEntities = (0, jostraca_1.each)(entity)
17
+ .filter((entity) => entity.publish);
18
+ if (0 === publishedEntities.length) {
19
+ return;
20
+ }
9
21
  (0, jostraca_1.Content)(`
10
22
 
11
23
  ## Entities
24
+
12
25
  `);
13
- (0, jostraca_1.each)(entity)
14
- .filter((entity) => entity.publish)
15
- .map((entity) => {
26
+ publishedEntities.map((entity) => {
27
+ const opnames = Object.keys(entity.op || {});
28
+ const fields = entity.field || [];
16
29
  (0, jostraca_1.Content)(`
17
- ### Entity: __${entity.Name}__
30
+ ### ${entity.Name}
31
+
32
+ `);
33
+ if (entity.short) {
34
+ (0, jostraca_1.Content)(`${entity.short}
35
+
36
+ `);
37
+ }
38
+ (0, jostraca_1.Content)(`Create an instance: \`const ${entity.name} = client.${entity.Name}()\`
39
+
40
+ `);
41
+ // Operations table
42
+ if (opnames.length > 0) {
43
+ (0, jostraca_1.Content)(`#### Operations
44
+
45
+ | Method | Description |
46
+ | --- | --- |
47
+ `);
48
+ opnames.map((opname) => {
49
+ const info = OP_DESC[opname];
50
+ if (info) {
51
+ (0, jostraca_1.Content)(`| \`${info.method}\` | ${info.desc} |
52
+ `);
53
+ }
54
+ });
55
+ (0, jostraca_1.Content)(`
56
+ `);
57
+ }
58
+ // Fields table
59
+ if (fields.length > 0) {
60
+ (0, jostraca_1.Content)(`#### Fields
18
61
 
62
+ | Field | Type | Description |
63
+ | --- | --- | --- |
19
64
  `);
20
- (0, jostraca_1.each)(entity.field, (field) => {
65
+ (0, jostraca_1.each)(fields, (field) => {
66
+ const desc = field.short || '';
67
+ (0, jostraca_1.Content)(`| \`${field.name}\` | \`${field.type || 'any'}\` | ${desc} |
68
+ `);
69
+ });
21
70
  (0, jostraca_1.Content)(`
22
- * __${field.name}__ (${field.type}): ${field.short}
23
-
24
71
  `);
25
- });
72
+ }
73
+ // Example usage
74
+ if (opnames.includes('load')) {
75
+ (0, jostraca_1.Content)(`#### Example: Load
76
+
77
+ \`\`\`ts
78
+ const ${entity.name} = await client.${entity.Name}().load({ id: '${entity.name}_id' })
79
+ \`\`\`
80
+
81
+ `);
82
+ }
83
+ if (opnames.includes('list')) {
84
+ (0, jostraca_1.Content)(`#### Example: List
85
+
86
+ \`\`\`ts
87
+ const ${entity.name}s = await client.${entity.Name}().list()
88
+ \`\`\`
89
+
90
+ `);
91
+ }
92
+ if (opnames.includes('create')) {
93
+ (0, jostraca_1.Content)(`#### Example: Create
94
+
95
+ \`\`\`ts
96
+ const ${entity.name} = await client.${entity.Name}().create({
97
+ `);
98
+ (0, jostraca_1.each)(fields, (field) => {
99
+ if ('id' !== field.name && field.req) {
100
+ (0, jostraca_1.Content)(` ${field.name}: /* ${field.type || 'value'} */,
101
+ `);
102
+ }
103
+ });
104
+ (0, jostraca_1.Content)(`})
105
+ \`\`\`
106
+
107
+ `);
108
+ }
26
109
  });
27
110
  });
28
111
  exports.ReadmeEntity = ReadmeEntity;
@@ -1 +1 @@
1
- {"version":3,"file":"ReadmeEntity.js","sourceRoot":"","sources":["../../src/cmp/ReadmeEntity.ts"],"names":[],"mappings":";;;AACA,uCAA6C;AAE7C,oCAGiB;AAGjB,MAAM,YAAY,GAAG,IAAA,cAAG,EAAC,SAAS,YAAY,CAAC,KAAU;IACvD,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,CAAA;IAEjC,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,KAAK,EAAE,QAAQ,WAAG,SAAS,CAAC,CAAA;IAExD,IAAA,kBAAO,EAAC;;;CAGT,CAAC,CAAA;IAGA,IAAA,eAAI,EAAC,MAAM,CAAC;SACT,MAAM,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;SACvC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE;QACnB,IAAA,kBAAO,EAAC;gBACE,MAAM,CAAC,IAAI;;CAE1B,CAAC,CAAA;QAEI,IAAA,eAAI,EAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAU,EAAE,EAAE;YAChC,IAAA,kBAAO,EAAC;MACV,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,KAAK;;CAEjD,CAAC,CAAA;QACI,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AAGN,CAAC,CAAC,CAAA;AAKA,oCAAY"}
1
+ {"version":3,"file":"ReadmeEntity.js","sourceRoot":"","sources":["../../src/cmp/ReadmeEntity.ts"],"names":[],"mappings":"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"}
@@ -2,12 +2,34 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ReadmeIntro = void 0;
4
4
  const jostraca_1 = require("jostraca");
5
+ const types_1 = require("../types");
5
6
  const ReadmeIntro = (0, jostraca_1.cmp)(function ReadmeIntro(props) {
6
- const { ctx$: { model } } = props;
7
+ const { target } = props;
8
+ const { model } = props.ctx$;
9
+ const desc = model.main.def.desc || '';
10
+ const entity = (0, types_1.getModelPath)(model, `main.${types_1.KIT}.entity`);
11
+ const entityNames = Object.values(entity)
12
+ .filter((e) => e.publish)
13
+ .map((e) => `\`${e.Name}\``);
7
14
  (0, jostraca_1.Content)(`
8
15
  ## Introduction
9
16
 
10
- ${model.main.def.desc}
17
+ ${desc}
18
+ `);
19
+ if (entityNames.length > 0) {
20
+ (0, jostraca_1.Content)(`
21
+ This SDK provides an entity-oriented interface for the ${model.Name} API.
22
+ The following entities are available: ${entityNames.join(', ')}.
23
+
24
+ `);
25
+ }
26
+ (0, jostraca_1.Content)(`
27
+ ### Features
28
+
29
+ - Entity-based API: work with business objects directly.
30
+ - Type safe: full TypeScript definitions included.
31
+ - Direct HTTP access: call any API endpoint using \`client.direct()\`.
32
+ - Testable: built-in test mode with mock support.
11
33
 
12
34
  `);
13
35
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ReadmeIntro.js","sourceRoot":"","sources":["../../src/cmp/ReadmeIntro.ts"],"names":[],"mappings":";;;AACA,uCAAuC;AAGvC,MAAM,WAAW,GAAG,IAAA,cAAG,EAAC,SAAS,WAAW,CAAC,KAAU;IACrD,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,CAAA;IAEjC,IAAA,kBAAO,EAAC;;;EAGR,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;;CAEpB,CAAC,CAAA;AAIF,CAAC,CAAC,CAAA;AAMA,kCAAW"}
1
+ {"version":3,"file":"ReadmeIntro.js","sourceRoot":"","sources":["../../src/cmp/ReadmeIntro.ts"],"names":[],"mappings":";;;AACA,uCAAuC;AAEvC,oCAGiB;AAGjB,MAAM,WAAW,GAAG,IAAA,cAAG,EAAC,SAAS,WAAW,CAAC,KAAU;IACrD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IACxB,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,CAAA;IAE5B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAA;IACtC,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,KAAK,EAAE,QAAQ,WAAG,SAAS,CAAC,CAAA;IAExD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;SACtC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;SAC7B,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAA;IAEnC,IAAA,kBAAO,EAAC;;;EAGR,IAAI;CACL,CAAC,CAAA;IAEA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,IAAA,kBAAO,EAAC;yDAC6C,KAAK,CAAC,IAAI;wCAC3B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;CAE7D,CAAC,CAAA;IACA,CAAC;IAED,IAAA,kBAAO,EAAC;;;;;;;;CAQT,CAAC,CAAA;AAEF,CAAC,CAAC,CAAA;AAMA,kCAAW"}
@@ -2,38 +2,115 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ReadmeModel = void 0;
4
4
  const jostraca_1 = require("jostraca");
5
+ const types_1 = require("../types");
5
6
  const ReadmeModel = (0, jostraca_1.cmp)(function ReadmeModel(props) {
6
7
  const { ctx$: { model } } = props;
8
+ const entity = (0, types_1.getModelPath)(model, `main.${types_1.KIT}.entity`);
9
+ const entityList = Object.values(entity).filter((e) => e.publish);
7
10
  (0, jostraca_1.Content)(`
8
- ## Entity Model
11
+ ## SDK Structure
9
12
 
10
- This SDK uses an entity-oriented interface, rather than exposing
11
- endpoint paths directly. Business logic can be mapped directly to
12
- business entities in your code.
13
+ This SDK uses an entity-oriented interface rather than exposing API
14
+ endpoint paths directly. Business logic maps directly to business
15
+ entities in your code.
13
16
 
14
- The SDK itself allows you to create one or more client instances,
15
- which can be used concurrently in the same thread. Each client
16
- instance provides a set of entity methods to create entity
17
- instances. Each entity instance can likewise operate independently.
18
17
 
18
+ ### Client
19
19
 
20
- ### SDK Methods
20
+ Create a client instance using the constructor or the static \`test\` method:
21
21
 
22
- * \`make(options)\`: Create a new client instance.
22
+ \`\`\`ts
23
+ // Production client
24
+ const client = new ${model.Name}SDK({ apikey: '...' })
25
+
26
+ // Test client with mock features
27
+ const testClient = ${model.Name}SDK.test()
28
+ \`\`\`
23
29
 
24
30
 
25
31
  ### Client Methods
26
32
 
27
- * \`[Entity]()\`: Create a new business entity instance.
33
+ | Method | Description |
34
+ | --- | --- |
35
+ `);
36
+ (0, jostraca_1.each)(entityList, (entity) => {
37
+ (0, jostraca_1.Content)(`| \`${entity.Name}(data?)\` | Create a new \`${entity.Name}\` entity instance. |
38
+ `);
39
+ });
40
+ (0, jostraca_1.Content)(`| \`options()\` | Return a copy of the current SDK options. |
41
+ | \`utility()\` | Return a copy of the SDK utility object. |
42
+ | \`direct(fetchargs)\` | Make a direct HTTP request to any API endpoint. |
43
+ | \`prepare(fetchargs)\` | Prepare a fetch definition without sending the request. |
44
+ | \`tester(testopts?, sdkopts?)\` | Create a test client instance. |
28
45
 
29
46
 
30
47
  ### Entity Methods
31
48
 
32
- * \`data(data?)\`: Set the data properties of the entity, returning the current data.
33
- * \`load(query)\`: Load matching single entity data into the entity instance.
34
- * \`save(data?)\`: Save the current entity, optionally setting data.
35
- * \`list(query)\`: List matching entities, return an array of new entities.
36
- * \`remove(query)\`: Delete the matching single entity.
49
+ Each entity instance provides the following methods, where available:
50
+
51
+ | Method | Description |
52
+ | --- | --- |
53
+ | \`data(data?)\` | Get or set the entity data. Returns the current data. |
54
+ | \`match(match?)\` | Get or set the entity match criteria. Returns the current match. |
55
+ | \`load(match)\` | Load a single entity by match criteria. |
56
+ | \`list(match)\` | List entities matching the criteria. Returns an array. |
57
+ | \`create(data)\` | Create a new entity with the given data. |
58
+ | \`update(data)\` | Update an existing entity with the given data. |
59
+ | \`remove(match)\` | Remove the entity matching the criteria. |
60
+ | \`make()\` | Create a new entity instance with the same options. |
61
+ | \`client()\` | Return the parent client instance. |
62
+ | \`entopts()\` | Return a copy of the entity options. |
63
+
64
+
65
+ ### Direct API Access
66
+
67
+ The \`direct\` method allows you to call any API endpoint without
68
+ using the entity interface:
69
+
70
+ \`\`\`ts
71
+ const result = await client.direct({
72
+ path: '/api/v1/resource/{id}',
73
+ method: 'GET',
74
+ params: { id: 'abc123' },
75
+ query: { fields: 'name,status' },
76
+ headers: { 'X-Custom': 'value' },
77
+ body: { key: 'value' },
78
+ })
79
+ \`\`\`
80
+
81
+ The result object has the following shape:
82
+
83
+ \`\`\`ts
84
+ {
85
+ ok: boolean, // true if status is 2xx
86
+ status: number, // HTTP status code
87
+ headers: object, // Response headers
88
+ data: any, // Parsed JSON response body
89
+ }
90
+ \`\`\`
91
+
92
+ Use the \`prepare\` method to build the fetch definition without
93
+ sending the request:
94
+
95
+ \`\`\`ts
96
+ const fetchdef = await client.prepare({
97
+ path: '/api/v1/resource',
98
+ method: 'POST',
99
+ body: { name: 'example' },
100
+ })
101
+
102
+ // fetchdef contains: { url, method, headers, body }
103
+ \`\`\`
104
+
105
+
106
+ ### Testing
107
+
108
+ Create a test client using the static \`test\` method. The test
109
+ client activates the test feature, which provides mock responses:
110
+
111
+ \`\`\`ts
112
+ const client = ${model.Name}SDK.test()
113
+ \`\`\`
37
114
 
38
115
  `);
39
116
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ReadmeModel.js","sourceRoot":"","sources":["../../src/cmp/ReadmeModel.ts"],"names":[],"mappings":";;;AACA,uCAAuC;AAGvC,MAAM,WAAW,GAAG,IAAA,cAAG,EAAC,SAAS,WAAW,CAAC,KAAU;IACrD,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,CAAA;IAEjC,IAAA,kBAAO,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BT,CAAC,CAAA;AAIF,CAAC,CAAC,CAAA;AAMA,kCAAW"}
1
+ {"version":3,"file":"ReadmeModel.js","sourceRoot":"","sources":["../../src/cmp/ReadmeModel.ts"],"names":[],"mappings":";;;AACA,uCAA6C;AAE7C,oCAGiB;AAGjB,MAAM,WAAW,GAAG,IAAA,cAAG,EAAC,SAAS,WAAW,CAAC,KAAU;IACrD,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,CAAA;IAEjC,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,KAAK,EAAE,QAAQ,WAAG,SAAS,CAAC,CAAA;IACxD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAEtE,IAAA,kBAAO,EAAC;;;;;;;;;;;;;;qBAcW,KAAK,CAAC,IAAI;;;qBAGV,KAAK,CAAC,IAAI;;;;;;;;CAQ9B,CAAC,CAAA;IAEA,IAAA,eAAI,EAAC,UAAU,EAAE,CAAC,MAAW,EAAE,EAAE;QAC/B,IAAA,kBAAO,EAAC,OAAO,MAAM,CAAC,IAAI,8BAA8B,MAAM,CAAC,IAAI;CACtE,CAAC,CAAA;IACA,CAAC,CAAC,CAAA;IAEF,IAAA,kBAAO,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwEO,KAAK,CAAC,IAAI;;;CAG1B,CAAC,CAAA;AAGF,CAAC,CAAC,CAAA;AAMA,kCAAW"}
@@ -4,18 +4,43 @@ exports.ReadmeOptions = void 0;
4
4
  const jostraca_1 = require("jostraca");
5
5
  const ReadmeOptions = (0, jostraca_1.cmp)(function ReadmeOptions(props) {
6
6
  const { target } = props;
7
+ const { model } = props.ctx$;
8
+ const publishedOptions = (0, jostraca_1.each)(target.options)
9
+ .filter((option) => option.publish);
10
+ if (0 === publishedOptions.length) {
11
+ return;
12
+ }
7
13
  (0, jostraca_1.Content)(`
8
14
 
9
15
  ## Options
10
16
 
17
+ Pass options when creating a client instance:
18
+
19
+ \`\`\`ts
20
+ const client = new ${model.Name}SDK({
21
+ `);
22
+ publishedOptions.map((option) => {
23
+ if ('apikey' === option.name) {
24
+ (0, jostraca_1.Content)(` ${option.name}: process.env.${model.NAME}_APIKEY,
25
+ `);
26
+ }
27
+ else {
28
+ (0, jostraca_1.Content)(` // ${option.name}: ${option.kind === 'string' ? "'...'" : '...'},
29
+ `);
30
+ }
31
+ });
32
+ (0, jostraca_1.Content)(`})
33
+ \`\`\`
34
+
35
+ | Option | Type | Description |
36
+ | --- | --- | --- |
11
37
  `);
12
- (0, jostraca_1.each)(target.options)
13
- .filter((option) => option.publish)
14
- .map((option) => {
15
- (0, jostraca_1.Content)(`
16
- * __${option.name} (${option.kind})__: ${option.short}
38
+ publishedOptions.map((option) => {
39
+ (0, jostraca_1.Content)(`| \`${option.name}\` | \`${option.kind}\` | ${option.short} |
17
40
  `);
18
41
  });
42
+ (0, jostraca_1.Content)(`
43
+ `);
19
44
  });
20
45
  exports.ReadmeOptions = ReadmeOptions;
21
46
  //# sourceMappingURL=ReadmeOptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReadmeOptions.js","sourceRoot":"","sources":["../../src/cmp/ReadmeOptions.ts"],"names":[],"mappings":";;;AACA,uCAA6C;AAG7C,MAAM,aAAa,GAAG,IAAA,cAAG,EAAC,SAAS,aAAa,CAAC,KAAU;IACzD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IAExB,IAAA,kBAAO,EAAC;;;;CAIT,CAAC,CAAA;IAEA,IAAA,eAAI,EAAC,MAAM,CAAC,OAAO,CAAC;SACjB,MAAM,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;SACvC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE;QACnB,IAAA,kBAAO,EAAC;MACR,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,QAAQ,MAAM,CAAC,KAAK;CACpD,CAAC,CAAA;IACE,CAAC,CAAC,CAAA;AAGN,CAAC,CAAC,CAAA;AAKA,sCAAa"}
1
+ {"version":3,"file":"ReadmeOptions.js","sourceRoot":"","sources":["../../src/cmp/ReadmeOptions.ts"],"names":[],"mappings":";;;AACA,uCAA6C;AAG7C,MAAM,aAAa,GAAG,IAAA,cAAG,EAAC,SAAS,aAAa,CAAC,KAAU;IACzD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IACxB,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,CAAA;IAE5B,MAAM,gBAAgB,GAAG,IAAA,eAAI,EAAC,MAAM,CAAC,OAAO,CAAC;SAC1C,MAAM,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAE1C,IAAI,CAAC,KAAK,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAClC,OAAM;IACR,CAAC;IAED,IAAA,kBAAO,EAAC;;;;;;;qBAOW,KAAK,CAAC,IAAI;CAC9B,CAAC,CAAA;IAEA,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE;QACnC,IAAI,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAA,kBAAO,EAAC,KAAK,MAAM,CAAC,IAAI,iBAAiB,KAAK,CAAC,IAAI;CACxD,CAAC,CAAA;QACE,CAAC;aACI,CAAC;YACJ,IAAA,kBAAO,EAAC,QAAQ,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;CAC/E,CAAC,CAAA;QACE,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,IAAA,kBAAO,EAAC;;;;;CAKT,CAAC,CAAA;IAEA,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE;QACnC,IAAA,kBAAO,EAAC,OAAO,MAAM,CAAC,IAAI,UAAU,MAAM,CAAC,IAAI,QAAQ,MAAM,CAAC,KAAK;CACtE,CAAC,CAAA;IACA,CAAC,CAAC,CAAA;IAEF,IAAA,kBAAO,EAAC;CACT,CAAC,CAAA;AAEF,CAAC,CAAC,CAAA;AAKA,sCAAa"}
@@ -0,0 +1,2 @@
1
+ declare const ReadmeRef: import("jostraca").Component;
2
+ export { ReadmeRef };