@voxgig/create-sdkgen 0.3.1 → 0.5.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 (95) hide show
  1. package/bin/create-sdkgen +36 -20
  2. package/dist/create-sdkgen.d.ts +2 -0
  3. package/dist/create-sdkgen.js +51 -5
  4. package/dist/create-sdkgen.js.map +1 -1
  5. package/dist/project/standard/CreateRoot.d.ts +2 -0
  6. package/dist/project/standard/CreateRoot.js +50 -0
  7. package/dist/project/standard/CreateRoot.js.map +1 -0
  8. package/dist/project/standard/ModelSdk.js +6 -1
  9. package/dist/project/standard/ModelSdk.js.map +1 -1
  10. package/dist/tsconfig.tsbuildinfo +1 -1
  11. package/package.json +10 -12
  12. package/project/standard/.sdk/model/api/api-info.jsonic +5 -0
  13. package/project/standard/.sdk/model/config.jsonic +3 -1
  14. package/project/standard/.sdk/model/{api/api-entity-index.jsonic → entity/entity-index.jsonic} +1 -0
  15. package/project/standard/.sdk/model/guide/guide.jsonic +8 -0
  16. package/project/standard/.sdk/model/sdk.fragment.jsonic +6 -10
  17. package/project/standard/.sdk/package.json +5 -7
  18. package/project/standard/.sdk/src/BuildSDK.ts +113 -0
  19. package/project/standard/.sdk/src/Root.ts +19 -7
  20. package/project/standard/.sdk/src/Top.ts +6 -2
  21. package/project/standard/.sdk/test/.model-config/model-config.json +5 -1
  22. package/project/standard/.sdk/test/primary/{outward.jsonic → clean.jsonic} +0 -1
  23. package/project/standard/.sdk/test/primary/done.jsonic +0 -1
  24. package/project/standard/.sdk/test/primary/{inward.jsonic → featureAdd.jsonic} +0 -1
  25. package/project/standard/.sdk/test/primary/featureHook.jsonic +2 -0
  26. package/project/standard/.sdk/test/primary/featureInit.jsonic +2 -0
  27. package/project/standard/.sdk/test/primary/fetcher.jsonic +2 -0
  28. package/project/standard/.sdk/test/primary/makeContext.jsonic +4 -0
  29. package/project/standard/.sdk/test/primary/makeError.jsonic +16 -0
  30. package/project/standard/.sdk/test/primary/makeFetchDef.jsonic +2 -0
  31. package/project/standard/.sdk/test/primary/{options.jsonic → makeOptions.jsonic} +5 -6
  32. package/project/standard/.sdk/test/primary/{request.jsonic → makeRequest.jsonic} +7 -13
  33. package/project/standard/.sdk/test/primary/makeResponse.jsonic +22 -0
  34. package/project/standard/.sdk/test/primary/makeResult.jsonic +2 -0
  35. package/project/standard/.sdk/test/primary/{spec.jsonic → makeSpec.jsonic} +9 -5
  36. package/project/standard/.sdk/test/primary/makeTarget.jsonic +2 -0
  37. package/project/standard/.sdk/test/primary/makeUrl.jsonic +21 -0
  38. package/project/standard/.sdk/test/primary/operator.jsonic +10 -53
  39. package/project/standard/.sdk/test/primary/{findparam.jsonic → param.jsonic} +6 -7
  40. package/project/standard/.sdk/test/primary/prepareAuth.jsonic +13 -0
  41. package/project/standard/.sdk/test/primary/prepareBody.jsonic +18 -0
  42. package/project/standard/.sdk/test/primary/prepareHeaders.jsonic +4 -0
  43. package/project/standard/.sdk/test/primary/prepareMethod.jsonic +10 -0
  44. package/project/standard/.sdk/test/primary/prepareParams.jsonic +9 -0
  45. package/project/standard/.sdk/test/primary/preparePath.jsonic +2 -0
  46. package/project/standard/.sdk/test/primary/prepareQuery.jsonic +8 -0
  47. package/project/standard/.sdk/test/primary/primary-test-index.jsonic +30 -0
  48. package/project/standard/.sdk/test/primary/resultBasic.jsonic +14 -0
  49. package/project/standard/.sdk/test/primary/resultBody.jsonic +4 -0
  50. package/project/standard/.sdk/test/primary/resultHeaders.jsonic +7 -0
  51. package/project/standard/.sdk/test/primary/transformRequest.jsonic +8 -0
  52. package/project/standard/.sdk/test/primary/transformResponse.jsonic +10 -0
  53. package/project/standard/.sdk/test/struct/merge.jsonic +102 -4
  54. package/project/standard/.sdk/test/struct/minor.jsonic +106 -38
  55. package/project/standard/.sdk/test/struct/select.jsonic +86 -5
  56. package/project/standard/.sdk/test/struct/test.json +16635 -0
  57. package/project/standard/.sdk/test/struct/test.jsonic +25 -0
  58. package/project/standard/.sdk/test/struct/transform.jsonic +100 -1
  59. package/project/standard/.sdk/test/struct/validate.jsonic +82 -45
  60. package/project/standard/.sdk/test/struct/walk.jsonic +57 -6
  61. package/project/standard/.sdk/test/test.json +5952 -3326
  62. package/project/standard/.sdk/test/test.jsonic +2 -43
  63. package/src/create-sdkgen.ts +74 -7
  64. package/src/project/standard/{Root.ts → CreateRoot.ts} +11 -6
  65. package/src/project/standard/ModelSdk.ts +6 -1
  66. package/dist/project/standard/Root.d.ts +0 -2
  67. package/dist/project/standard/Root.js +0 -79
  68. package/dist/project/standard/Root.js.map +0 -1
  69. package/dist/standard/ModelSdk.d.ts +0 -2
  70. package/dist/standard/ModelSdk.js +0 -19
  71. package/dist/standard/ModelSdk.js.map +0 -1
  72. package/dist/standard/Root.d.ts +0 -2
  73. package/dist/standard/Root.js +0 -77
  74. package/dist/standard/Root.js.map +0 -1
  75. package/dist/utility.d.ts +0 -2
  76. package/dist/utility.js +0 -5
  77. package/dist/utility.js.map +0 -1
  78. package/project/standard/.sdk/model/api/api-def.jsonic +0 -5
  79. package/project/standard/.sdk/model/guide.jsonic +0 -5
  80. package/project/standard/.sdk/model/target/target-index.jsonic~ +0 -4
  81. package/project/standard/.sdk/test/primary/auth.jsonic +0 -20
  82. package/project/standard/.sdk/test/primary/body.jsonic +0 -27
  83. package/project/standard/.sdk/test/primary/contextify.jsonic +0 -5
  84. package/project/standard/.sdk/test/primary/error.jsonic +0 -19
  85. package/project/standard/.sdk/test/primary/fullurl.jsonic +0 -50
  86. package/project/standard/.sdk/test/primary/headers.jsonic +0 -12
  87. package/project/standard/.sdk/test/primary/method.jsonic +0 -11
  88. package/project/standard/.sdk/test/primary/params.jsonic +0 -10
  89. package/project/standard/.sdk/test/primary/query.jsonic +0 -9
  90. package/project/standard/.sdk/test/primary/reqform.jsonic +0 -9
  91. package/project/standard/.sdk/test/primary/resbasic.jsonic +0 -15
  92. package/project/standard/.sdk/test/primary/resbody.jsonic +0 -5
  93. package/project/standard/.sdk/test/primary/resform.jsonic +0 -11
  94. package/project/standard/.sdk/test/primary/resheaders.jsonic +0 -9
  95. package/project/standard/.sdk/test/primary/response.jsonic +0 -20
@@ -1,44 +1,3 @@
1
- # Copyright (c) 2025 Voxgig Ltd. MIT License.
2
-
3
- # Tests are defined as sets of expected inputs and outputs
4
- # The test runner script for each language loads the generated test.json
5
- # file and runs the actual tests.
6
-
7
- # Each language must pass these exact same tests, ensuring uniform
8
- # behaviour over all languages.
9
-
10
-
11
- # Tests for the core "struct" data structure utilities.
12
- struct: minor: @"struct/minor.jsonic"
13
- struct: getpath: @"struct/getpath.jsonic"
14
- struct: inject: @"struct/inject.jsonic"
15
- struct: merge: @"struct/merge.jsonic"
16
- struct: transform: @"struct/transform.jsonic"
17
- struct: walk: @"struct/walk.jsonic"
18
- struct: validate: @"struct/validate.jsonic"
19
- struct: select: @"struct/select.jsonic"
20
-
21
-
22
- # Tests for the primary SDK utilities.
23
- primary: auth: @"primary/auth.jsonic"
24
- primary: body: @"primary/body.jsonic"
25
- primary: contextify: @"primary/contextify.jsonic"
26
- primary: done: @"primary/done.jsonic"
27
- primary: error: @"primary/error.jsonic"
28
- primary: findparam: @"primary/findparam.jsonic"
29
- primary: fullurl: @"primary/fullurl.jsonic"
30
- primary: headers: @"primary/headers.jsonic"
31
- primary: resform: @"primary/resform.jsonic"
32
- primary: method: @"primary/method.jsonic"
33
- primary: operator: @"primary/operator.jsonic"
34
- primary: options: @"primary/options.jsonic"
35
- primary: reqform: @"primary/reqform.jsonic"
36
- primary: params: @"primary/params.jsonic"
37
- primary: query: @"primary/query.jsonic"
38
- primary: request: @"primary/request.jsonic"
39
- primary: resbasic: @"primary/resbasic.jsonic"
40
- primary: resbody: @"primary/resbody.jsonic"
41
- primary: resheaders: @"primary/resheaders.jsonic"
42
- primary: response: @"primary/response.jsonic"
43
- primary: spec: @"primary/spec.jsonic"
44
1
 
2
+ @"struct/test.jsonic"
3
+ @"primary/primary-test-index.jsonic"
@@ -1,6 +1,7 @@
1
1
  /* Copyright (c) 2024-2025 Richard Rodger, MIT License */
2
2
 
3
3
  import * as Fs from 'node:fs'
4
+ import * as Os from 'node:os'
4
5
  import Path from 'node:path'
5
6
  import { spawn } from 'child_process'
6
7
 
@@ -22,20 +23,28 @@ type CreateSdkGenOptions = Partial<FullCreateSdkGenOptions>
22
23
 
23
24
 
24
25
  type GenerateSpec = {
26
+ sdk_folder: string
27
+
25
28
  name: string // Name of SDK project.
26
29
  def: string // Path to OpenAPI definition file, copied into SDK project.
27
30
  root: string // Path to Root template component.
28
- project: string
31
+ project: string // Project template name
29
32
  debug?: string
30
33
  dryrun?: boolean
31
34
  target?: string[]
32
35
  feature?: string[]
33
- install?: boolean
36
+ install?: boolean // perform installation - run npm install
37
+ folder?: string // Target folder for project
38
+
34
39
  }
35
40
 
36
41
 
37
42
  const { names, Jostraca } = JostracaModule
38
43
 
44
+
45
+ const SDK_FOLDER = '.sdk'
46
+
47
+
39
48
  // TODO: CreateSdkGen opts and generate opts should be mostly the same, and
40
49
  // generate should override
41
50
  function CreateSdkGen(opts: FullCreateSdkGenOptions) {
@@ -63,12 +72,21 @@ function CreateSdkGen(opts: FullCreateSdkGenOptions) {
63
72
  const rootPath = Path.join(projectFolder, spec.root)
64
73
 
65
74
  const rootModule: any = require(rootPath)
66
- const Root = rootModule.Root
75
+ const CreateRoot = rootModule.CreateRoot
67
76
 
68
77
  const name = spec.name
69
78
  spec.def = (null == spec.def || '' === spec.def) ? name + '-openapi3.yml' : spec.def
70
79
 
71
- const folder = Path.join(process.cwd(), name + (name.endsWith('-sdk') ? '' : '-sdk'))
80
+ spec.sdk_folder = SDK_FOLDER
81
+
82
+ const cwd = process.cwd()
83
+
84
+ const folder = (null == spec.folder || '' == spec.folder) ?
85
+ Path.join(cwd, name + (name.endsWith('-sdk') ? '' : '-sdk')) :
86
+ Path.isAbsolute(spec.folder) ? spec.folder :
87
+ Path.join(cwd, spec.folder)
88
+
89
+ logCreate(folder)
72
90
 
73
91
  const jopts = {
74
92
  fs: () => fs,
@@ -103,9 +121,9 @@ function CreateSdkGen(opts: FullCreateSdkGenOptions) {
103
121
  note: JSON.stringify(jopts, null, 2)
104
122
  })
105
123
 
106
- const jres = await jostraca.generate(jopts, () => Root({ model, spec }))
124
+ const jres = await jostraca.generate(jopts, () => CreateRoot({ model, spec }))
107
125
 
108
- showChanges(jopts.log, 'generate-result', jres, Path.dirname(process.cwd()))
126
+ showChanges(jopts.log, 'generate-result', jres, process.cwd())
109
127
 
110
128
  if (spec.dryrun || !spec.install) {
111
129
  log.info({ point: 'generate-install', note: 'skipping npm install' })
@@ -138,6 +156,55 @@ function CreateSdkGen(opts: FullCreateSdkGenOptions) {
138
156
  }
139
157
 
140
158
 
159
+ function escapeShellArg(arg: string): string {
160
+ // If arg contains no special characters, return as-is
161
+ if (/^[~a-zA-Z0-9_\-\.\/]+$/.test(arg)) {
162
+ return arg
163
+ }
164
+
165
+ // Otherwise, wrap in single quotes and escape any single quotes
166
+ return "'" + arg.replace(/'/g, "'\\''") + "'"
167
+ }
168
+
169
+
170
+ function logCreate(folder: string) {
171
+ try {
172
+ const logFolder = Path.join(folder, SDK_FOLDER, 'log')
173
+
174
+ if (!fs.existsSync(logFolder)) {
175
+ fs.mkdirSync(logFolder, { recursive: true })
176
+ }
177
+
178
+ const now = new Date()
179
+ const utcTimestamp = '[' + now.toISOString() + ']'
180
+
181
+ const timezoneName = Intl.DateTimeFormat().resolvedOptions().timeZone
182
+ const localISOString = now.getFullYear() + '-' +
183
+ String(now.getMonth() + 1).padStart(2, '0') + '-' +
184
+ String(now.getDate()).padStart(2, '0') + 'T' +
185
+ String(now.getHours()).padStart(2, '0') + ':' +
186
+ String(now.getMinutes()).padStart(2, '0') + ':' +
187
+ String(now.getSeconds()).padStart(2, '0') + '.' +
188
+ String(now.getMilliseconds()).padStart(3, '0')
189
+ const localTimestamp = timezoneName + '=' + localISOString
190
+
191
+ const homeDir = Os.homedir()
192
+ const command = process.argv
193
+ .map(arg => arg.replace(homeDir, '~'))
194
+ .map(escapeShellArg)
195
+ .join(' ')
196
+
197
+ const logLine = `${utcTimestamp} ${localTimestamp} CREATE ${command}\n`
198
+
199
+ const logFile = Path.join(logFolder, 'create.log')
200
+ fs.appendFileSync(logFile, logLine, 'utf8')
201
+ }
202
+ catch (err) {
203
+ log.debug({ point: 'logCreate-error', err })
204
+ }
205
+ }
206
+
207
+
141
208
  return {
142
209
  generate,
143
210
  }
@@ -152,7 +219,7 @@ async function installNpm(spec: GenerateSpec, opts: any, model: any) {
152
219
  const log = opts.log
153
220
 
154
221
  return new Promise(async (resolve, reject) => {
155
- const cwd = Path.resolve(folder, '.sdk')
222
+ const cwd = Path.resolve(folder, SDK_FOLDER)
156
223
 
157
224
  const env = {
158
225
  ...process.env,
@@ -1,7 +1,7 @@
1
1
 
2
2
 
3
3
  import Path from 'node:path'
4
- import * as Fs from 'node:fs'
4
+ // import * as Fs from 'node:fs'
5
5
 
6
6
  import {
7
7
  names,
@@ -20,8 +20,9 @@ import { ModelSdk } from './ModelSdk'
20
20
 
21
21
 
22
22
  // TODO: rename to RootSdk
23
- const Root = cmp(function Root(props: any) {
23
+ const CreateRoot = cmp(function CreateRoot(props: any) {
24
24
  const { ctx$, ctx$: { folder }, spec, model } = props
25
+ const fs = ctx$.fs()
25
26
 
26
27
  // TODO: move to @voxgig/util as duplicated
27
28
  model.const = { name: model.name }
@@ -37,19 +38,23 @@ const Root = cmp(function Root(props: any) {
37
38
  // console.log('FROM', from)
38
39
 
39
40
  Copy({
40
- from
41
+ from,
42
+ exclude: [/\.fragment\./]
41
43
  })
42
44
 
43
45
  const origdef = spec.def
44
46
  const projdef = Path.basename(origdef)
45
47
  spec.def = projdef
46
48
 
47
- Folder({ name: '.sdk' }, () => {
49
+ Folder({ name: spec.sdk_folder }, () => {
48
50
  Folder({ name: 'def' }, () => {
49
- if (Fs.existsSync(origdef)) {
51
+ // TODO: file existence check should be jostraca util
52
+ if (fs.existsSync(origdef)) {
50
53
  Copy({ from: origdef, to: projdef })
51
54
  }
52
55
  else {
56
+ console.log('DEF NOT FOUND: ', origdef)
57
+
53
58
  File({ name: projdef }, () => {
54
59
  Content('# OpenAPI Definition')
55
60
  })
@@ -66,5 +71,5 @@ const Root = cmp(function Root(props: any) {
66
71
 
67
72
 
68
73
  export {
69
- Root
74
+ CreateRoot
70
75
  }
@@ -1,4 +1,7 @@
1
1
 
2
+ import Path from 'node:path'
3
+
4
+
2
5
  import {
3
6
  cmp,
4
7
  File,
@@ -11,10 +14,12 @@ import {
11
14
  const ModelSdk = cmp(function ModelSdk(props: any) {
12
15
  const { spec } = props
13
16
 
17
+ const from =
18
+ Path.resolve(Path.join(__dirname + '..', '..', '..', '..', 'project', 'standard'))
14
19
 
15
20
  File({ name: 'sdk.jsonic' }, () => {
16
21
  Fragment({
17
- from: __dirname + '/../../../project/standard/.sdk/model/sdk.fragment.jsonic',
22
+ from: Path.join(from, spec.sdk_folder, 'model', 'sdk.fragment.jsonic'),
18
23
  replace: {
19
24
  ProjectName: spec.name,
20
25
  NAME: spec.name,
@@ -1,2 +0,0 @@
1
- declare const Root: import("jostraca").Component;
2
- export { Root };
@@ -1,79 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.Root = void 0;
40
- const node_path_1 = __importDefault(require("node:path"));
41
- const Fs = __importStar(require("node:fs"));
42
- const jostraca_1 = require("jostraca");
43
- const ModelSdk_1 = require("./ModelSdk");
44
- // TODO: rename to RootSdk
45
- const Root = (0, jostraca_1.cmp)(function Root(props) {
46
- const { ctx$, ctx$: { folder }, spec, model } = props;
47
- // TODO: move to @voxgig/util as duplicated
48
- model.const = { name: model.name };
49
- (0, jostraca_1.names)(model.const, model.name);
50
- model.const.year = new Date().getFullYear();
51
- ctx$.model = model;
52
- (0, jostraca_1.Project)({ folder }, () => {
53
- const from = node_path_1.default.resolve(node_path_1.default.join(__dirname + '..', '..', '..', '..', 'project', 'standard'));
54
- // console.log('FROM', from)
55
- (0, jostraca_1.Copy)({
56
- from
57
- });
58
- const origdef = spec.def;
59
- const projdef = node_path_1.default.basename(origdef);
60
- spec.def = projdef;
61
- (0, jostraca_1.Folder)({ name: '.sdk' }, () => {
62
- (0, jostraca_1.Folder)({ name: 'def' }, () => {
63
- if (Fs.existsSync(origdef)) {
64
- (0, jostraca_1.Copy)({ from: origdef, to: projdef });
65
- }
66
- else {
67
- (0, jostraca_1.File)({ name: projdef }, () => {
68
- (0, jostraca_1.Content)('# OpenAPI Definition');
69
- });
70
- }
71
- });
72
- (0, jostraca_1.Folder)({ name: 'model' }, () => {
73
- (0, ModelSdk_1.ModelSdk)({ spec });
74
- });
75
- });
76
- });
77
- });
78
- exports.Root = Root;
79
- //# sourceMappingURL=Root.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Root.js","sourceRoot":"","sources":["../../../src/project/standard/Root.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,0DAA4B;AAC5B,4CAA6B;AAE7B,uCAUiB;AAGjB,yCAAqC;AAGrC,0BAA0B;AAC1B,MAAM,IAAI,GAAG,IAAA,cAAG,EAAC,SAAS,IAAI,CAAC,KAAU;IACvC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;IAErD,2CAA2C;IAC3C,KAAK,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;IAClC,IAAA,gBAAK,EAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAE3C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IAElB,IAAA,kBAAO,EAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE;QACvB,MAAM,IAAI,GACR,mBAAI,CAAC,OAAO,CAAC,mBAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAA;QAEpF,4BAA4B;QAE5B,IAAA,eAAI,EAAC;YACH,IAAI;SACL,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAA;QACxB,MAAM,OAAO,GAAG,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAA;QAElB,IAAA,iBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE;YAC5B,IAAA,iBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE;gBAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,IAAA,eAAI,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;gBACtC,CAAC;qBACI,CAAC;oBACJ,IAAA,eAAI,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE;wBAC3B,IAAA,kBAAO,EAAC,sBAAsB,CAAC,CAAA;oBACjC,CAAC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,IAAA,iBAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE;gBAC7B,IAAA,mBAAQ,EAAC,EAAE,IAAI,EAAE,CAAC,CAAA;YACpB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IAEJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAIA,oBAAI"}
@@ -1,2 +0,0 @@
1
- declare const ModelSdk: import("jostraca").Component;
2
- export { ModelSdk };
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ModelSdk = void 0;
4
- const jostraca_1 = require("jostraca");
5
- const ModelSdk = (0, jostraca_1.cmp)(function ModelSdk(props) {
6
- const { spec } = props;
7
- (0, jostraca_1.File)({ name: 'sdk.jsonic' }, () => {
8
- (0, jostraca_1.Fragment)({
9
- from: __dirname + '/../../project/.sdk/model/sdk.fragment.jsonic',
10
- replace: {
11
- // TODO: should use ProjectName for consistency
12
- NAME: spec.name,
13
- DEF: spec.def,
14
- }
15
- });
16
- });
17
- });
18
- exports.ModelSdk = ModelSdk;
19
- //# sourceMappingURL=ModelSdk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ModelSdk.js","sourceRoot":"","sources":["../../src/standard/ModelSdk.ts"],"names":[],"mappings":";;;AACA,uCAKiB;AAIjB,MAAM,QAAQ,GAAG,IAAA,cAAG,EAAC,SAAS,QAAQ,CAAC,KAAU;IAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IAGtB,IAAA,eAAI,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE;QAChC,IAAA,mBAAQ,EAAC;YACP,IAAI,EAAE,SAAS,GAAG,+CAA+C;YACjE,OAAO,EAAE;gBACP,+CAA+C;gBAC/C,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG,EAAE,IAAI,CAAC,GAAG;aACd;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AAEJ,CAAC,CAAC,CAAA;AAIA,4BAAQ"}
@@ -1,2 +0,0 @@
1
- declare const Root: import("jostraca").Component;
2
- export { Root };
@@ -1,77 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.Root = void 0;
40
- const node_path_1 = __importDefault(require("node:path"));
41
- const Fs = __importStar(require("node:fs"));
42
- const jostraca_1 = require("jostraca");
43
- const ModelSdk_1 = require("./ModelSdk");
44
- // TODO: rename to RootSdk
45
- const Root = (0, jostraca_1.cmp)(function Root(props) {
46
- const { ctx$, ctx$: { folder }, spec, model } = props;
47
- // TODO: move to @voxgig/util as duplicated
48
- model.const = { name: model.name };
49
- (0, jostraca_1.names)(model.const, model.name);
50
- model.const.year = new Date().getFullYear();
51
- ctx$.model = model;
52
- (0, jostraca_1.Project)({ folder }, () => {
53
- (0, jostraca_1.Copy)({
54
- from: __dirname + '/../../project',
55
- });
56
- const origdef = spec.def;
57
- const projdef = node_path_1.default.basename(origdef);
58
- spec.def = projdef;
59
- (0, jostraca_1.Folder)({ name: '.sdk' }, () => {
60
- (0, jostraca_1.Folder)({ name: 'def' }, () => {
61
- if (Fs.existsSync(origdef)) {
62
- (0, jostraca_1.Copy)({ from: origdef, to: projdef });
63
- }
64
- else {
65
- (0, jostraca_1.File)({ name: projdef }, () => {
66
- (0, jostraca_1.Content)('# OpenAPI Definition');
67
- });
68
- }
69
- });
70
- (0, jostraca_1.Folder)({ name: 'model' }, () => {
71
- (0, ModelSdk_1.ModelSdk)({ spec });
72
- });
73
- });
74
- });
75
- });
76
- exports.Root = Root;
77
- //# sourceMappingURL=Root.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Root.js","sourceRoot":"","sources":["../../src/standard/Root.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,0DAA4B;AAC5B,4CAA6B;AAE7B,uCAUiB;AAGjB,yCAAqC;AAGrC,0BAA0B;AAC1B,MAAM,IAAI,GAAG,IAAA,cAAG,EAAC,SAAS,IAAI,CAAC,KAAU;IACvC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;IAErD,2CAA2C;IAC3C,KAAK,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;IAClC,IAAA,gBAAK,EAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAE3C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IAElB,IAAA,kBAAO,EAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE;QACvB,IAAA,eAAI,EAAC;YACH,IAAI,EAAE,SAAS,GAAG,gBAAgB;SACnC,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAA;QACxB,MAAM,OAAO,GAAG,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAA;QAElB,IAAA,iBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE;YAC5B,IAAA,iBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE;gBAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,IAAA,eAAI,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;gBACtC,CAAC;qBACI,CAAC;oBACJ,IAAA,eAAI,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE;wBAC3B,IAAA,kBAAO,EAAC,sBAAsB,CAAC,CAAA;oBACjC,CAAC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,IAAA,iBAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE;gBAC7B,IAAA,mBAAQ,EAAC,EAAE,IAAI,EAAE,CAAC,CAAA;YACpB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IAEJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAIA,oBAAI"}
package/dist/utility.d.ts DELETED
@@ -1,2 +0,0 @@
1
- declare function foo(): void;
2
- export { foo };
package/dist/utility.js DELETED
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.foo = foo;
4
- function foo() { }
5
- //# sourceMappingURL=utility.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utility.js","sourceRoot":"","sources":["../src/utility.ts"],"names":[],"mappings":";;AAME,kBAAG;AAJL,SAAS,GAAG,KAAK,CAAC"}
@@ -1,5 +0,0 @@
1
- # API Definition
2
-
3
- main: def: {}
4
-
5
-
@@ -1,5 +0,0 @@
1
- # Guide
2
-
3
- main: api: guide: {}
4
-
5
-
@@ -1,4 +0,0 @@
1
- # SDK Targets.
2
-
3
- @"ts.jsonic"
4
-
@@ -1,20 +0,0 @@
1
-
2
- DEF: {
3
- client: a: test: options: { apikey: 'APIKEY01' }
4
- client: b: test: options: {}
5
- }
6
-
7
-
8
- basic: set: [
9
-
10
- { ctx: spec:headers:{}
11
- client: a
12
- match: out:headers:authorization:'Bearer APIKEY01'
13
- }
14
-
15
- # { ctx: spec:headers:{}
16
- # client: b
17
- # match: out:headers:authorization:'__UNDEF__' }
18
-
19
- ]
20
-
@@ -1,27 +0,0 @@
1
-
2
- basic: set: [
3
- {
4
- ctx: {
5
- op:kind:req, op:reqform:'`data.foo`', op:check:nobody:true
6
- op:data:foo:{x:1}
7
- }
8
- out: {x:1}
9
- }
10
-
11
- {
12
- ctx: {
13
- op:kind:req, op:reqform:'`data.bar`', op:check:nobody:false
14
- op:data:foo:{x:2}
15
- }
16
- }
17
-
18
- {
19
- ctx: {
20
- op:kind:req, op:reqform:'`data.bar`', op:check:nobody:true
21
- op:data:foo:{x:3}
22
- }
23
- err: 'empty'
24
- }
25
-
26
- ]
27
-
@@ -1,5 +0,0 @@
1
-
2
- basic: set: [
3
- { in:{op:{kind:req}}, match:out:{op:{kind:req}} }
4
- ]
5
-
@@ -1,19 +0,0 @@
1
-
2
- basic: set: [
3
- { args:[], err:'SDK: unknown operation: unknown error' }
4
- { args:[{}], err:'SDK: unknown operation: unknown error' }
5
- { args:[{},{}], err:'SDK: unknown operation: unknown error' }
6
-
7
- { args:[{op:{}}], err:'SDK: unknown operation: unknown error' }
8
- { args:[{op:name:foo}], err:'SDK: foo: unknown error' }
9
- { args:[{op:name:foo,result:{}}], err:'SDK: foo: unknown error' }
10
-
11
- { args:[{op:name:foo,result:{err:message:bar}}], err:'SDK: foo: bar' }
12
- { args:[{op:name:foo}, {message:zed}], err:'SDK: foo: zed' }
13
-
14
- { args:[{op:name:o0}, {message:e0}], err:'SDK: o0: e0'
15
- match: err:message:'SDK: o0: e0'
16
- }
17
-
18
- ]
19
-
@@ -1,50 +0,0 @@
1
-
2
- basic: set: [
3
- {
4
- ctx: {
5
- op: {
6
- params: ['a'],
7
- },
8
- spec: {
9
- base: 'base-',
10
- prefix: 'prefix-',
11
- suffix: 'suffix-',
12
- path: '/p0/{a}',
13
- params: {
14
- a: 'A'
15
- },
16
- query: {
17
- b: 'B'
18
- },
19
- alias: {}
20
- },
21
- },
22
- out: 'base-/prefix-/p0/A/suffix-?b=B'
23
- }
24
-
25
- {
26
- ctx: {
27
- op: {
28
- kind: 'res',
29
- params: ['foo_id'],
30
- alias: {
31
- foo_id: 'id'
32
- },
33
- match: {
34
- id: 'A',
35
- },
36
- },
37
- spec: {
38
- base: 'base-',
39
- prefix: 'prefix-',
40
- suffix: 'suffix-',
41
- path: '/p0/{foo_id}',
42
- params: {},
43
- alias: {}
44
- }
45
- }
46
- out: 'base-/prefix-/p0/A/suffix-'
47
- }
48
-
49
- ]
50
-
@@ -1,12 +0,0 @@
1
-
2
- DEF: {
3
- client: a: test: options: { headers: { foo:FOO, bar:BAR, accept: '*/*' } }
4
- }
5
-
6
- basic: set: [
7
- { ctx: {}, out: { 'content-type': 'application/json', 'accept': 'application/json' } }
8
-
9
- { ctx: {}, client:a,
10
- out: { foo:FOO, bar:BAR, 'content-type': 'application/json', 'accept': '*/*' } }
11
- ]
12
-
@@ -1,11 +0,0 @@
1
-
2
- basic: set: [
3
- { ctx: { op:name:create }, out: POST }
4
- { ctx: { op:name:update }, out: PUT }
5
- { ctx: { op:name:list }, out: GET }
6
- { ctx: { op:name:load }, out: GET }
7
- { ctx: { op:name:remove }, out: DELETE }
8
-
9
- { ctx: { op:name:bad } }
10
- ]
11
-
@@ -1,10 +0,0 @@
1
-
2
- basic: set: [
3
- { ctx: {op:{}}, out:{} }
4
- { ctx: {op:params:[a]}, out:{} }
5
- { ctx: {op:params:[a], op:match:a:A}, out:{a:A} }
6
- { ctx: {op:params:[a], op:match:b:B}, out:{} }
7
- { ctx: {op:params:[a], op:match:a:A,b:B}, out:{a:A} }
8
-
9
- ]
10
-