@scalar/fastify-api-reference 0.8.2 → 0.8.4

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/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @scalar/fastify-api-reference
2
2
 
3
+ ## 0.8.4
4
+
5
+ ### Patch Changes
6
+
7
+ - 0c25c75: chore: remove console log from fastify package
8
+
9
+ ## 0.8.3
10
+
11
+ ### Patch Changes
12
+
13
+ - fc540bf: chore: make routePrefix optional
14
+ - fc540bf: chore: use routePrefix for JavaScript file
15
+
3
16
  ## 0.8.2
4
17
 
5
18
  ### Patch Changes
@@ -4,9 +4,9 @@ export type FastifyApiReferenceOptions = {
4
4
  /**
5
5
  * Prefix for the registered route
6
6
  *
7
- * @default '/'
7
+ * @default ''
8
8
  */
9
- routePrefix: string;
9
+ routePrefix?: string;
10
10
  configuration?: ReferenceConfiguration;
11
11
  };
12
12
  /**
@@ -16,11 +16,11 @@ export declare const defaultCss = "\n:root {\n --theme-font: 'Inter', var(--sys
16
16
  /**
17
17
  * The HTML to load the @scalar/api-reference JavaScript package.
18
18
  */
19
- export declare const javascript: (configuration: ReferenceConfiguration) => string;
19
+ export declare const javascript: (options: FastifyApiReferenceOptions) => string;
20
20
  /**
21
21
  * The HTML template to render the API Reference.
22
22
  */
23
- export declare function htmlDocument(configuration: ReferenceConfiguration): string;
23
+ export declare function htmlDocument(options: FastifyApiReferenceOptions): string;
24
24
  declare const _default: FastifyPluginAsync<FastifyApiReferenceOptions>;
25
25
  export default _default;
26
26
  //# sourceMappingURL=fastifyApiReference.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fastifyApiReference.d.ts","sourceRoot":"","sources":["../src/fastifyApiReference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAMjD,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,sBAAsB,CAAA;CACvC,CAAA;AAQD;;GAEG;AACH,eAAO,MAAM,UAAU,i8EA+EtB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,kBAAmB,sBAAsB,WAgB/D,CAAA;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,sBAAsB,UAqBjE;;AAoFD,wBAAsC"}
1
+ {"version":3,"file":"fastifyApiReference.d.ts","sourceRoot":"","sources":["../src/fastifyApiReference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAMjD,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,sBAAsB,CAAA;CACvC,CAAA;AAcD;;GAEG;AACH,eAAO,MAAM,UAAU,i8EA+EtB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,YAAa,0BAA0B,WAkB7D,CAAA;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,0BAA0B,UAqB/D;;AAuFD,wBAAsC"}
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.create,Object.defineProperty,Object.getOwnPropertyDescriptor,Object.getOwnPropertyNames,Object.getPrototypeOf,Object.prototype.hasOwnProperty;const e=require("fastify-plugin"),n=require("node:fs"),t=require("node:path");const o={hide:!0};function r(e){return`\n<!DOCTYPE html>\n<html>\n <head>\n <title>API Reference</title>\n <meta charset="utf-8" />\n <meta\n name="viewport"\n content="width=device-width, initial-scale=1" />\n <style>\n body {\n margin: 0;\n }\n </style>\n </head>\n <body>\n ${(e=>{var n,t,o,r;return`\n <script\n id="api-reference"\n type="application/json"\n data-configuration="${JSON.stringify(e).split('"').join("&quot;")}">${(null==(n=e.spec)?void 0:n.content)?"function"==typeof(null==(t=e.spec)?void 0:t.content)?JSON.stringify(null==(o=e.spec)?void 0:o.content()):JSON.stringify(null==(r=e.spec)?void 0:r.content):""}<\/script>\n <script src="/@scalar/fastify-api-reference/browser.js"><\/script>\n `})(e)}\n </body>\n</html>\n`}const c=e((async(e,c)=>{var a,l;let{configuration:s}=c;const i=e.hasPlugin("@fastify/swagger");if(e.hasPlugin("fastify-html")||await e.register(import("fastify-html")),!(null==(a=null==s?void 0:s.spec)?void 0:a.content)&&!(null==(l=null==s?void 0:s.spec)?void 0:l.url)&&!i)return void e.log.warn("[@scalar/fastify-api-reference] You didn’t provide a spec.content or spec.url and @fastify/swagger could not be find either. Please provide one of these options.");const h=function(){const e=[t.resolve(`${__dirname}/js/standalone.js`),t.resolve(`${__dirname}/../../dist/js/standalone.js`)].find((e=>n.existsSync(e)));if(void 0===e)throw new Error(`JavaScript file not found: ${t.resolve(`${__dirname}/js/standalone.js`)}`);return n.readFileSync(e,"utf8")}();e.route({method:"GET",url:c.routePrefix??"/",schema:o,async handler(n,t){var o,c;return t.header("Content-Type","text/html; charset=utf-8"),(null==(o=null==s?void 0:s.spec)?void 0:o.content)||(null==(c=null==s?void 0:s.spec)?void 0:c.url)||!i||(s={...s,spec:{content:()=>e.swagger()}}),(null==s?void 0:s.customCss)||(null==s?void 0:s.theme)||(s={...s,customCss:"\n:root {\n --theme-font: 'Inter', var(--system-fonts);\n}\n\n.light-mode {\n color-scheme: light;\n --theme-color-1: #1c1e21;\n --theme-color-2: #757575;\n --theme-color-3: #8e8e8e;\n --theme-color-disabled: #b4b1b1;\n --theme-color-ghost: #a7a7a7;\n --theme-color-accent: #2f8555;\n --theme-background-1: #fff;\n --theme-background-2: #f5f5f5;\n --theme-background-3: #ededed;\n --theme-background-4: rgba(0, 0, 0, 0.06);\n --theme-background-accent: #2f85551f;\n\n --theme-border-color: rgba(0, 0, 0, 0.1);\n --theme-scrollbar-color: rgba(0, 0, 0, 0.18);\n --theme-scrollbar-color-active: rgba(0, 0, 0, 0.36);\n --theme-lifted-brightness: 1;\n --theme-backdrop-brightness: 1;\n\n --theme-shadow-1: 0 1px 3px 0 rgba(0, 0, 0, 0.11);\n --theme-shadow-2: rgba(0, 0, 0, 0.08) 0px 13px 20px 0px,\n rgba(0, 0, 0, 0.08) 0px 3px 8px 0px, #eeeeed 0px 0 0 1px;\n\n --theme-button-1: rgb(49 53 56);\n --theme-button-1-color: #fff;\n --theme-button-1-hover: rgb(28 31 33);\n\n --theme-color-green: #007300;\n --theme-color-red: #af272b;\n --theme-color-yellow: #b38200;\n --theme-color-blue: #3b8ba5;\n --theme-color-orange: #fb892c;\n --theme-color-purple: #5203d1;\n}\n\n.dark-mode {\n color-scheme: dark;\n --theme-color-1: rgba(255, 255, 255, 0.9);\n --theme-color-2: rgba(255, 255, 255, 0.62);\n --theme-color-3: rgba(255, 255, 255, 0.44);\n --theme-color-disabled: rgba(255, 255, 255, 0.34);\n --theme-color-ghost: rgba(255, 255, 255, 0.26);\n --theme-color-accent: #27c2a0;\n --theme-background-1: #1b1b1d;\n --theme-background-2: #242526;\n --theme-background-3: #3b3b3b;\n --theme-background-4: rgba(255, 255, 255, 0.06);\n --theme-background-accent: #27c2a01f;\n\n --theme-border-color: rgba(255, 255, 255, 0.1);\n --theme-scrollbar-color: rgba(255, 255, 255, 0.24);\n --theme-scrollbar-color-active: rgba(255, 255, 255, 0.48);\n --theme-lifted-brightness: 1.45;\n --theme-backdrop-brightness: 0.5;\n\n --theme-shadow-1: 0 1px 3px 0 rgb(0, 0, 0, 0.1);\n --theme-shadow-2: rgba(15, 15, 15, 0.2) 0px 3px 6px,\n rgba(15, 15, 15, 0.4) 0px 9px 24px, 0 0 0 1px rgba(255, 255, 255, 0.1);\n\n --theme-button-1: #f6f6f6;\n --theme-button-1-color: #000;\n --theme-button-1-hover: #e7e7e7;\n\n --theme-color-green: #26b226;\n --theme-color-red: #fb565b;\n --theme-color-yellow: #ffc426;\n --theme-color-blue: #6ecfef;\n --theme-color-orange: #ff8d4d;\n --theme-color-purple: #b191f9;\n}\n.scalar-card:nth-of-type(3) {\n display: none;\n}\n"}),t.html`${r(s)}`}}),e.route({method:"GET",url:"/@scalar/fastify-api-reference/browser.js",schema:o,async handler(e,n){n.header("Content-Type","application/javascript; charset=utf-8"),n.send(h)}})}));module.exports=c;
1
+ "use strict";Object.create,Object.defineProperty,Object.getOwnPropertyDescriptor,Object.getOwnPropertyNames,Object.getPrototypeOf,Object.prototype.hasOwnProperty;const e=require("fastify-plugin"),n=require("node:fs"),t=require("node:path");const o={hide:!0},r=e=>`${e??""}/@scalar/fastify-api-reference/js/browser.js`.replace(/\/\//g,"/");function c(e){return`\n<!DOCTYPE html>\n<html>\n <head>\n <title>API Reference</title>\n <meta charset="utf-8" />\n <meta\n name="viewport"\n content="width=device-width, initial-scale=1" />\n <style>\n body {\n margin: 0;\n }\n </style>\n </head>\n <body>\n ${(e=>{var n,t,o,c;const{configuration:a}=e;return`\n <script\n id="api-reference"\n type="application/json"\n data-configuration="${JSON.stringify(a??{}).split('"').join("&quot;")}">${(null==(n=null==a?void 0:a.spec)?void 0:n.content)?"function"==typeof(null==(t=null==a?void 0:a.spec)?void 0:t.content)?JSON.stringify(null==(o=null==a?void 0:a.spec)?void 0:o.content()):JSON.stringify(null==(c=null==a?void 0:a.spec)?void 0:c.content):""}<\/script>\n <script src="${r(e.routePrefix)}"><\/script>\n `})(e)}\n </body>\n</html>\n`}const a=e((async(e,a)=>{var l,s;let{configuration:i}=a;const h=e.hasPlugin("@fastify/swagger");if(e.hasPlugin("fastify-html")||await e.register(import("fastify-html")),!(null==(l=null==i?void 0:i.spec)?void 0:l.content)&&!(null==(s=null==i?void 0:i.spec)?void 0:s.url)&&!h)return void e.log.warn("[@scalar/fastify-api-reference] You didn’t provide a spec.content or spec.url and @fastify/swagger could not be find either. Please provide one of these options.");const d=function(){const e=[t.resolve(`${__dirname}/js/standalone.js`),t.resolve(`${__dirname}/../../dist/js/standalone.js`)].find((e=>n.existsSync(e)));if(void 0===e)throw new Error(`JavaScript file not found: ${t.resolve(`${__dirname}/js/standalone.js`)}`);return n.readFileSync(e,"utf8")}();e.route({method:"GET",url:a.routePrefix??"/",schema:o,async handler(n,t){var o,r;return t.header("Content-Type","text/html; charset=utf-8"),(null==(o=null==i?void 0:i.spec)?void 0:o.content)||(null==(r=null==i?void 0:i.spec)?void 0:r.url)||!h||(i={...i,spec:{content:()=>e.swagger()}}),(null==i?void 0:i.customCss)||(null==i?void 0:i.theme)||(i={...i,customCss:"\n:root {\n --theme-font: 'Inter', var(--system-fonts);\n}\n\n.light-mode {\n color-scheme: light;\n --theme-color-1: #1c1e21;\n --theme-color-2: #757575;\n --theme-color-3: #8e8e8e;\n --theme-color-disabled: #b4b1b1;\n --theme-color-ghost: #a7a7a7;\n --theme-color-accent: #2f8555;\n --theme-background-1: #fff;\n --theme-background-2: #f5f5f5;\n --theme-background-3: #ededed;\n --theme-background-4: rgba(0, 0, 0, 0.06);\n --theme-background-accent: #2f85551f;\n\n --theme-border-color: rgba(0, 0, 0, 0.1);\n --theme-scrollbar-color: rgba(0, 0, 0, 0.18);\n --theme-scrollbar-color-active: rgba(0, 0, 0, 0.36);\n --theme-lifted-brightness: 1;\n --theme-backdrop-brightness: 1;\n\n --theme-shadow-1: 0 1px 3px 0 rgba(0, 0, 0, 0.11);\n --theme-shadow-2: rgba(0, 0, 0, 0.08) 0px 13px 20px 0px,\n rgba(0, 0, 0, 0.08) 0px 3px 8px 0px, #eeeeed 0px 0 0 1px;\n\n --theme-button-1: rgb(49 53 56);\n --theme-button-1-color: #fff;\n --theme-button-1-hover: rgb(28 31 33);\n\n --theme-color-green: #007300;\n --theme-color-red: #af272b;\n --theme-color-yellow: #b38200;\n --theme-color-blue: #3b8ba5;\n --theme-color-orange: #fb892c;\n --theme-color-purple: #5203d1;\n}\n\n.dark-mode {\n color-scheme: dark;\n --theme-color-1: rgba(255, 255, 255, 0.9);\n --theme-color-2: rgba(255, 255, 255, 0.62);\n --theme-color-3: rgba(255, 255, 255, 0.44);\n --theme-color-disabled: rgba(255, 255, 255, 0.34);\n --theme-color-ghost: rgba(255, 255, 255, 0.26);\n --theme-color-accent: #27c2a0;\n --theme-background-1: #1b1b1d;\n --theme-background-2: #242526;\n --theme-background-3: #3b3b3b;\n --theme-background-4: rgba(255, 255, 255, 0.06);\n --theme-background-accent: #27c2a01f;\n\n --theme-border-color: rgba(255, 255, 255, 0.1);\n --theme-scrollbar-color: rgba(255, 255, 255, 0.24);\n --theme-scrollbar-color-active: rgba(255, 255, 255, 0.48);\n --theme-lifted-brightness: 1.45;\n --theme-backdrop-brightness: 0.5;\n\n --theme-shadow-1: 0 1px 3px 0 rgb(0, 0, 0, 0.1);\n --theme-shadow-2: rgba(15, 15, 15, 0.2) 0px 3px 6px,\n rgba(15, 15, 15, 0.4) 0px 9px 24px, 0 0 0 1px rgba(255, 255, 255, 0.1);\n\n --theme-button-1: #f6f6f6;\n --theme-button-1-color: #000;\n --theme-button-1-hover: #e7e7e7;\n\n --theme-color-green: #26b226;\n --theme-color-red: #fb565b;\n --theme-color-yellow: #ffc426;\n --theme-color-blue: #6ecfef;\n --theme-color-orange: #ff8d4d;\n --theme-color-purple: #b191f9;\n}\n.scalar-card:nth-of-type(3) {\n display: none;\n}\n"}),t.html`${c({...a,configuration:i})}`}}),e.route({method:"GET",url:r(a.routePrefix),schema:o,async handler(e,n){n.header("Content-Type","application/javascript; charset=utf-8"),n.send(d)}})}));module.exports=a;
package/dist/index.js CHANGED
@@ -27,6 +27,10 @@ function getJavaScriptFile() {
27
27
  const schemaToHideRoute = {
28
28
  hide: true
29
29
  };
30
+ const getJavaScriptUrl = (routePrefix) => `${routePrefix ?? ""}/@scalar/fastify-api-reference/js/browser.js`.replace(
31
+ /\/\//g,
32
+ "/"
33
+ );
30
34
  const defaultCss = `
31
35
  :root {
32
36
  --theme-font: 'Inter', var(--system-fonts);
@@ -107,17 +111,18 @@ const defaultCss = `
107
111
  display: none;
108
112
  }
109
113
  `;
110
- const javascript = (configuration) => {
114
+ const javascript = (options) => {
111
115
  var _a, _b, _c, _d;
116
+ const { configuration } = options;
112
117
  return `
113
118
  <script
114
119
  id="api-reference"
115
120
  type="application/json"
116
- data-configuration="${JSON.stringify(configuration).split('"').join("&quot;")}">${((_a = configuration.spec) == null ? void 0 : _a.content) ? typeof ((_b = configuration.spec) == null ? void 0 : _b.content) === "function" ? JSON.stringify((_c = configuration.spec) == null ? void 0 : _c.content()) : JSON.stringify((_d = configuration.spec) == null ? void 0 : _d.content) : ""}<\/script>
117
- <script src="/@scalar/fastify-api-reference/browser.js"><\/script>
121
+ data-configuration="${JSON.stringify(configuration ?? {}).split('"').join("&quot;")}">${((_a = configuration == null ? void 0 : configuration.spec) == null ? void 0 : _a.content) ? typeof ((_b = configuration == null ? void 0 : configuration.spec) == null ? void 0 : _b.content) === "function" ? JSON.stringify((_c = configuration == null ? void 0 : configuration.spec) == null ? void 0 : _c.content()) : JSON.stringify((_d = configuration == null ? void 0 : configuration.spec) == null ? void 0 : _d.content) : ""}<\/script>
122
+ <script src="${getJavaScriptUrl(options.routePrefix)}"><\/script>
118
123
  `;
119
124
  };
120
- function htmlDocument(configuration) {
125
+ function htmlDocument(options) {
121
126
  return `
122
127
  <!DOCTYPE html>
123
128
  <html>
@@ -134,7 +139,7 @@ function htmlDocument(configuration) {
134
139
  </style>
135
140
  </head>
136
141
  <body>
137
- ${javascript(configuration)}
142
+ ${javascript(options)}
138
143
  </body>
139
144
  </html>
140
145
  `;
@@ -178,12 +183,15 @@ const fastifyApiReference = async (fastify, options) => {
178
183
  customCss: defaultCss
179
184
  };
180
185
  }
181
- return reply.html`${htmlDocument(configuration)}`;
186
+ return reply.html`${htmlDocument({
187
+ ...options,
188
+ configuration
189
+ })}`;
182
190
  }
183
191
  });
184
192
  fastify.route({
185
193
  method: "GET",
186
- url: "/@scalar/fastify-api-reference/browser.js",
194
+ url: getJavaScriptUrl(options.routePrefix),
187
195
  // We don’t know whether @fastify/swagger is registered, but it doesn’t hurt to add a schema anyway.
188
196
  // @ts-ignore
189
197
  schema: schemaToHideRoute,