@thymian/plugin-openapi 0.1.1 → 0.1.2-canary.20260408-c479a4a
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/README.md +53 -5
- package/dist/index.d.ts +1 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -54
- package/dist/index.js.map +1 -1
- package/package.json +12 -4
- package/dist/cli/init-hook.d.ts +0 -5
- package/dist/cli/init-hook.d.ts.map +0 -1
- package/dist/cli/init-hook.js +0 -55
- package/dist/cli/init-hook.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,11 +1,59 @@
|
|
|
1
|
+
<!-- HEADER:START - Do not remove or modify this section -->
|
|
2
|
+
<div align="center">
|
|
3
|
+
<img src="https://raw.githubusercontent.com/thymianofficial/thymian/main/astro-docs/src/assets/logo.svg" alt="Thymian Logo" width="200"/>
|
|
4
|
+
|
|
1
5
|
# Thymian
|
|
2
6
|
|
|
3
|
-
Add resilience and HTTP conformance to your API development workflow
|
|
7
|
+
**Add resilience and HTTP conformance to your API development workflow**
|
|
8
|
+
|
|
9
|
+
[](https://github.com/thymianofficial/thymian/blob/main/LICENSE)
|
|
10
|
+
[](https://github.com/thymianofficial/thymian/actions/workflows/ci.yaml)
|
|
11
|
+
[](https://thymian.dev)
|
|
12
|
+
[](https://discord.gg/TRSwCxbz9f)
|
|
13
|
+
[](https://www.reddit.com/r/ThymianOfficial/)
|
|
14
|
+
[](https://x.com/thymiandev)
|
|
15
|
+
|
|
16
|
+
</div>
|
|
17
|
+
<!-- HEADER:END -->
|
|
18
|
+
|
|
19
|
+
## @thymian/plugin-openapi
|
|
20
|
+
|
|
21
|
+
Parses OpenAPI specification documents and converts them into Thymian's internal format for analysis. Supports OpenAPI 3.x documents in YAML or JSON, resolving `$ref` references and extracting HTTP endpoints for conformance validation.
|
|
22
|
+
|
|
23
|
+
## Installation
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install @thymian/plugin-openapi
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
> **Getting started with Thymian?** See the [main Thymian package](https://www.npmjs.com/package/thymian) for quick installation and first-run instructions.
|
|
30
|
+
|
|
31
|
+
<!-- FOOTER:START - Do not remove or modify this section -->
|
|
32
|
+
|
|
33
|
+
## 📚 Documentation
|
|
34
|
+
|
|
35
|
+
- **[Getting Started](https://thymian.dev/introduction/getting-started)** - Set up Thymian in minutes
|
|
36
|
+
- **[Documentation](https://thymian.dev)** - Comprehensive guides and API reference
|
|
37
|
+
- **[CLI Reference](https://thymian.dev/references/cli)** - Complete CLI command documentation
|
|
38
|
+
- **[HTTP Rules](https://thymian.dev/guides/http-rules/how-to-use-rules)** - Learn about HTTP conformance validation
|
|
39
|
+
|
|
40
|
+
## 🏢 Enterprise Support
|
|
41
|
+
|
|
42
|
+
Get professional consulting and dedicated support from the creators of Thymian. We offer:
|
|
43
|
+
|
|
44
|
+
- API design and governance strategies
|
|
45
|
+
- HTTP standards compliance auditing
|
|
46
|
+
- Custom plugin development
|
|
47
|
+
- Custom rule development
|
|
48
|
+
- Team training and workshops
|
|
49
|
+
|
|
50
|
+
**[Learn more about Enterprise Support](https://thymian.dev/enterprise)** | **Email: [support@thymian.dev](mailto:support@thymian.dev)**
|
|
4
51
|
|
|
5
|
-
|
|
52
|
+
---
|
|
6
53
|
|
|
7
|
-
|
|
54
|
+
<div align="center">
|
|
8
55
|
|
|
9
|
-
|
|
56
|
+
**Shipped with 🌱 by [qupaya](https://qupaya.com)**
|
|
10
57
|
|
|
11
|
-
|
|
58
|
+
</div>
|
|
59
|
+
<!-- FOOTER:END -->
|
package/dist/index.d.ts
CHANGED
|
@@ -37,15 +37,8 @@ declare module '@thymian/core' {
|
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
export type OpenApiPluginOptions = {
|
|
41
|
-
descriptions?: {
|
|
42
|
-
serverInfo?: ServerInfo;
|
|
43
|
-
source: string;
|
|
44
|
-
sourceName?: string;
|
|
45
|
-
}[];
|
|
46
|
-
};
|
|
47
40
|
export declare const defaultServerInfo: ServerInfo;
|
|
48
|
-
export declare const openApiPlugin: ThymianPlugin
|
|
41
|
+
export declare const openApiPlugin: ThymianPlugin;
|
|
49
42
|
export default openApiPlugin;
|
|
50
43
|
export { searchForOpenApiFiles } from './search-for-openapi-files.js';
|
|
51
44
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAE5B,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAEtE,OAAO,QAAQ,eAAe,CAAC;IAC7B,UAAU,kBAAkB;QAC1B,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,WAAW,CAAC,EAAE,MAAM,CAAC;aACtB,CAAC;SACH,CAAC;KACH;IAED,UAAU,cAAc;QACtB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,UAAU,EAAE,MAAM,CAAC;aACpB,CAAC;SACH,CAAC;KACH;IAED,UAAU,aAAa;QACrB,kBAAkB,CAChB,aAAa,EAAE,SAAS,EACxB,MAAM,EAAE;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE,GAC9B,WAAW,GAAG,SAAS,CAAC;KAC5B;IAED,UAAU,aAAa;QACrB,kBAAkB,EAAE;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC;YAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;KACH;IAED,UAAU,cAAc;QACtB,mBAAmB,EAAE;YACnB,KAAK,EAAE;gBACL,MAAM,CAAC,EAAE,oBAAoB,CAAC;gBAC9B,OAAO,EAAE,MAAM,CAAC;aACjB,CAAC;YACF,QAAQ,EAAE,uBAAuB,CAAC;SACnC,CAAC;KACH;CACF;AAED,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAE5B,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAEtE,OAAO,QAAQ,eAAe,CAAC;IAC7B,UAAU,kBAAkB;QAC1B,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,WAAW,CAAC,EAAE,MAAM,CAAC;aACtB,CAAC;SACH,CAAC;KACH;IAED,UAAU,cAAc;QACtB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,UAAU,EAAE,MAAM,CAAC;aACpB,CAAC;SACH,CAAC;KACH;IAED,UAAU,aAAa;QACrB,kBAAkB,CAChB,aAAa,EAAE,SAAS,EACxB,MAAM,EAAE;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE,GAC9B,WAAW,GAAG,SAAS,CAAC;KAC5B;IAED,UAAU,aAAa;QACrB,kBAAkB,EAAE;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC;YAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;KACH;IAED,UAAU,cAAc;QACtB,mBAAmB,EAAE;YACnB,KAAK,EAAE;gBACL,MAAM,CAAC,EAAE,oBAAoB,CAAC;gBAC9B,OAAO,EAAE,MAAM,CAAC;aACjB,CAAC;YACF,QAAQ,EAAE,uBAAuB,CAAC;SACnC,CAAC;KACH;CACF;AAED,eAAO,MAAM,iBAAiB,EAAE,UAK/B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,aA+D3B,CAAC;AAEF,eAAe,aAAa,CAAC;AAE7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,59 +9,6 @@ export const defaultServerInfo = {
|
|
|
9
9
|
export const openApiPlugin = {
|
|
10
10
|
name: '@thymian/plugin-openapi',
|
|
11
11
|
version: '0.x',
|
|
12
|
-
options: {
|
|
13
|
-
// ### for reference documentation ###
|
|
14
|
-
title: 'Plugin Options',
|
|
15
|
-
description: 'Configuration options for the OpenAPI plugin',
|
|
16
|
-
// ###################################
|
|
17
|
-
type: 'object',
|
|
18
|
-
additionalProperties: false,
|
|
19
|
-
properties: {
|
|
20
|
-
descriptions: {
|
|
21
|
-
type: 'array',
|
|
22
|
-
nullable: true,
|
|
23
|
-
items: {
|
|
24
|
-
type: 'object',
|
|
25
|
-
additionalProperties: false,
|
|
26
|
-
required: ['source'],
|
|
27
|
-
properties: {
|
|
28
|
-
source: {
|
|
29
|
-
type: 'string',
|
|
30
|
-
nullable: false,
|
|
31
|
-
},
|
|
32
|
-
sourceName: {
|
|
33
|
-
type: 'string',
|
|
34
|
-
nullable: true,
|
|
35
|
-
},
|
|
36
|
-
serverInfo: {
|
|
37
|
-
type: 'object',
|
|
38
|
-
nullable: true,
|
|
39
|
-
required: ['host', 'port', 'basePath', 'protocol'],
|
|
40
|
-
properties: {
|
|
41
|
-
basePath: {
|
|
42
|
-
type: 'string',
|
|
43
|
-
nullable: false,
|
|
44
|
-
},
|
|
45
|
-
port: {
|
|
46
|
-
type: 'integer',
|
|
47
|
-
nullable: false,
|
|
48
|
-
},
|
|
49
|
-
host: {
|
|
50
|
-
type: 'string',
|
|
51
|
-
nullable: false,
|
|
52
|
-
},
|
|
53
|
-
protocol: {
|
|
54
|
-
type: 'string',
|
|
55
|
-
nullable: false,
|
|
56
|
-
enum: ['http', 'https'],
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
12
|
plugin: async (emitter, logger, opts) => {
|
|
66
13
|
emitter.onAction('openapi.transform', async ({ content, filter }, ctx) => {
|
|
67
14
|
const [, thymianFormat] = await loadAndTransform(content, {
|
|
@@ -87,7 +34,7 @@ export const openApiPlugin = {
|
|
|
87
34
|
? input.options['serverInfo']
|
|
88
35
|
: undefined,
|
|
89
36
|
}))
|
|
90
|
-
:
|
|
37
|
+
: [];
|
|
91
38
|
if (descriptions.length === 0) {
|
|
92
39
|
ctx.reply(format.export());
|
|
93
40
|
return;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAGR,aAAa,GAGd,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thymian/plugin-openapi",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2-canary.20260408-c479a4a",
|
|
4
4
|
"license": "AGPL-3.0-only",
|
|
5
|
+
"bugs": {
|
|
6
|
+
"url": "https://github.com/thymianofficial/thymian/issues"
|
|
7
|
+
},
|
|
8
|
+
"homepage": "https://thymian.dev",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/thymianofficial/thymian.git",
|
|
12
|
+
"directory": "packages/plugin-openapi"
|
|
13
|
+
},
|
|
5
14
|
"publishConfig": {
|
|
6
15
|
"access": "public"
|
|
7
16
|
},
|
|
@@ -19,8 +28,8 @@
|
|
|
19
28
|
"dependencies": {
|
|
20
29
|
"@scalar/openapi-parser": "^0.23.2",
|
|
21
30
|
"@scalar/openapi-upgrader": "^0.1.4",
|
|
22
|
-
"@thymian/common-cli": "0.1.
|
|
23
|
-
"@thymian/core": "0.1.
|
|
31
|
+
"@thymian/common-cli": "0.1.2-canary.20260408-c479a4a",
|
|
32
|
+
"@thymian/core": "0.1.2-canary.20260408-c479a4a",
|
|
24
33
|
"jsonc-parser": "^3.2.0",
|
|
25
34
|
"tinyglobby": "^0.2.14",
|
|
26
35
|
"traverse": "^0.6.11",
|
|
@@ -31,7 +40,6 @@
|
|
|
31
40
|
"bin": "thymian",
|
|
32
41
|
"topicSeparator": " ",
|
|
33
42
|
"hooks": {
|
|
34
|
-
"thymian-plugin.init": "./dist/cli/init-hook",
|
|
35
43
|
"thymian.spec-search": "./dist/cli/spec-search-hook"
|
|
36
44
|
},
|
|
37
45
|
"topics": {
|
package/dist/cli/init-hook.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init-hook.d.ts","sourceRoot":"","sources":["../../src/cli/init-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGvE,QAAA,MAAM,IAAI,EAAE,qBAAqB,CAAC,oBAAoB,CA0DrD,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
package/dist/cli/init-hook.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { checkbox, confirm, runPrompts } from '@thymian/common-cli/prompts';
|
|
2
|
-
import { openApiPlugin } from '../index.js';
|
|
3
|
-
import { searchForOpenApiFiles } from '../search-for-openapi-files.js';
|
|
4
|
-
const hook = async function (opts) {
|
|
5
|
-
if (opts.interactive) {
|
|
6
|
-
return runPrompts(async () => {
|
|
7
|
-
const options = {
|
|
8
|
-
descriptions: [],
|
|
9
|
-
};
|
|
10
|
-
const result = {
|
|
11
|
-
include: true,
|
|
12
|
-
configuration: {
|
|
13
|
-
options,
|
|
14
|
-
},
|
|
15
|
-
pluginName: openApiPlugin.name,
|
|
16
|
-
};
|
|
17
|
-
const shouldInclude = await confirm({
|
|
18
|
-
message: `Do you want to include plugin ${openApiPlugin.name}?`,
|
|
19
|
-
});
|
|
20
|
-
if (!shouldInclude) {
|
|
21
|
-
return {
|
|
22
|
-
pluginName: openApiPlugin.name,
|
|
23
|
-
configuration: {},
|
|
24
|
-
include: false,
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
const matches = await searchForOpenApiFiles(opts.cwd);
|
|
28
|
-
if (matches.length > 0) {
|
|
29
|
-
const choices = await checkbox({
|
|
30
|
-
message: 'Which Swagger/OpenAPI file should be processed?',
|
|
31
|
-
choices: matches.map((name) => ({ name, value: name })),
|
|
32
|
-
});
|
|
33
|
-
options.descriptions = choices.map((c) => ({ source: c }));
|
|
34
|
-
}
|
|
35
|
-
return result;
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
const matches = await searchForOpenApiFiles(opts.cwd);
|
|
40
|
-
const descriptions = matches.map((match) => ({
|
|
41
|
-
source: match,
|
|
42
|
-
}));
|
|
43
|
-
return {
|
|
44
|
-
include: true,
|
|
45
|
-
pluginName: openApiPlugin.name,
|
|
46
|
-
configuration: {
|
|
47
|
-
options: {
|
|
48
|
-
descriptions,
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
export default hook;
|
|
55
|
-
//# sourceMappingURL=init-hook.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init-hook.js","sourceRoot":"","sources":["../../src/cli/init-hook.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,MAAM,IAAI,GAAgD,KAAK,WAC7D,IAAI;IAEJ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,OAAO,GAAG;gBACd,YAAY,EAAE,EAA0B;aACV,CAAC;YAEjC,MAAM,MAAM,GAAkD;gBAC5D,OAAO,EAAE,IAAI;gBACb,aAAa,EAAE;oBACb,OAAO;iBACR;gBACD,UAAU,EAAE,aAAa,CAAC,IAAI;aAC/B,CAAC;YAEF,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC;gBAClC,OAAO,EAAE,iCAAiC,aAAa,CAAC,IAAI,GAAG;aAChE,CAAC,CAAC;YAEH,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO;oBACL,UAAU,EAAE,aAAa,CAAC,IAAI;oBAC9B,aAAa,EAAE,EAAE;oBACjB,OAAO,EAAE,KAAK;iBACf,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEtD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC;oBAC7B,OAAO,EAAE,iDAAiD;oBAC1D,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;iBACxD,CAAC,CAAC;gBAEH,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEtD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3C,MAAM,EAAE,KAAK;SACd,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,aAAa,CAAC,IAAI;YAC9B,aAAa,EAAE;gBACb,OAAO,EAAE;oBACP,YAAY;iBACb;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|