Skip to content

Latest commit

History

1,368 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

@funboxteam/crafter

npm (scoped)Coverage Status

Crafter avatar

Crafter is an API Blueprint parser written in pure JavaScript. It is a replacement for Drafter library with some handy features added.

По-русски

Rationale

Drafter is written in C++, so the code is pretty complicated and obscure while containing a lot of bugs and legacy. It is hard to understand how some of its parts work. And if bug fixes are welcomed by maintainers, adding a new feature could become an obstacle.

Our company has a tiny percent of C++ projects, so almost none of the developers can maintain Drafter.

That is why we decided to create own JavaScript replacement which eliminates all previously described limitations, is easy to maintain, and allows us to add all needed features.

Features

Compared to Drafter, this library can offer some important features:

  • Modules. Now it is possible to split one giant file into parts and inject APIB files into each other, which makes documentation easy to use.
  • Resource Prototypes allow you to set up common responses in one place and reuse them through the documentation.
  • Support of arrays in query strings.
  • JSON Schema based types. In case of complex types it is possible to describe them directly as JSON Schema.
  • String validation attributes that describe the expected length of parameters and regular expressions they should match.
  • Describe a non-HTTP interaction (as WebSocket) by means of Message section.

Additional information about how the library works is placed in the docs directory.

Installation

Global install:

npm install -g @funboxteam/crafter

Local install:

npm install --save @funboxteam/crafter

Usage

Node.js

Parse a file:

constcrafter=require('@funboxteam/crafter');constapibFile='doc.apib';constast=(awaitcrafter.parseFile(apibFile))[0].toRefract();

Or provide a string variable containing APIB documentation:

constcrafter=require('@funboxteam/crafter');constsource='# My API\n\n## List users [GET /users]\n\n+ Response 200';constast=(awaitcrafter.parse(source))[0].toRefract();

CLI

To parse a file named doc.apib run the next command:

crafter [options] doc.apib

Options

  • -f, --format <format> — set output format of the parse result. Available formats: json, yaml. Default is yaml.
  • -s, --sourcemap — export source maps in the parse result.
  • -d, --debug — enable debugging mode, which disables catching some of the exceptions.
  • -l, --langserver — enable tolerant mode, which is used in language server.
  • -h, --help — output usage information.

Run tests

npm test

Run in Docker

To run @funboxteam/crafter as a Docker container execute the next command in the directory with documentation:

docker run \
--rm \
-v $(pwd):/app \
funbox/crafter -f json doc-file.apib

The default working directory of the image is set to /app, therefore it is easier to mount a host directory into the /app. Then just a filename as a parameter will do.

Docker container in Windows

To run a container in Windows, add a slash (/) before pwd. The command will look like this:

docker run \
--rm \
-v /$(pwd):/app/doc \
funbox/crafter -f json doc/doc-file.apib

There is a chance that the mounted directory is empty. In this case, check that your hard drive is marked as shared. This setting can be found in the settings of Docker Desktop for Windows, Shared Drives section. If the disk is not shared, mark it as shared, apply changes, and restart Docker Desktop.

Why API Blueprint

We use JSON API widely in the company, so each day our developers face such issues as describing and approving API documentation, tracking changes, distributing documentation among partners, and so on. That is why we felt a strong need for convenient tools to work with documentation.

Historically, the battle was between API Blueprint and Swagger. We chose API Blueprint for two reasons. Firstly, the source code of documentation that is described using API Blueprint is more readable to humans. Secondly, at the time of research conducted, Swagger lacked several important features, as One Of support.

Credits

Awesome logo for the project was made by Igor Garybaldi.

Sponsored by FunBox

About

API Blueprint parser written in pure JavaScript

Topics

Resources

Stars

13 stars

Watchers

9 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - funbox/crafter: API Blueprint parser written in pure JavaScript · GitHub
Skip to content

Latest commit

History

1,368 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

@funboxteam/crafter

npm (scoped)Coverage Status

Crafter avatar

Crafter is an API Blueprint parser written in pure JavaScript. It is a replacement for Drafter library with some handy features added.

По-русски

Rationale

Drafter is written in C++, so the code is pretty complicated and obscure while containing a lot of bugs and legacy. It is hard to understand how some of its parts work. And if bug fixes are welcomed by maintainers, adding a new feature could become an obstacle.

Our company has a tiny percent of C++ projects, so almost none of the developers can maintain Drafter.

That is why we decided to create own JavaScript replacement which eliminates all previously described limitations, is easy to maintain, and allows us to add all needed features.

Features

Compared to Drafter, this library can offer some important features:

  • Modules. Now it is possible to split one giant file into parts and inject APIB files into each other, which makes documentation easy to use.
  • Resource Prototypes allow you to set up common responses in one place and reuse them through the documentation.
  • Support of arrays in query strings.
  • JSON Schema based types. In case of complex types it is possible to describe them directly as JSON Schema.
  • String validation attributes that describe the expected length of parameters and regular expressions they should match.
  • Describe a non-HTTP interaction (as WebSocket) by means of Message section.

Additional information about how the library works is placed in the docs directory.

Installation

Global install:

npm install -g @funboxteam/crafter

Local install:

npm install --save @funboxteam/crafter

Usage

Node.js

Parse a file:

constcrafter=require('@funboxteam/crafter');constapibFile='doc.apib';constast=(awaitcrafter.parseFile(apibFile))[0].toRefract();

Or provide a string variable containing APIB documentation:

constcrafter=require('@funboxteam/crafter');constsource='# My API\n\n## List users [GET /users]\n\n+ Response 200';constast=(awaitcrafter.parse(source))[0].toRefract();

CLI

To parse a file named doc.apib run the next command:

crafter [options] doc.apib

Options

  • -f, --format <format> — set output format of the parse result. Available formats: json, yaml. Default is yaml.
  • -s, --sourcemap — export source maps in the parse result.
  • -d, --debug — enable debugging mode, which disables catching some of the exceptions.
  • -l, --langserver — enable tolerant mode, which is used in language server.
  • -h, --help — output usage information.

Run tests

npm test

Run in Docker

To run @funboxteam/crafter as a Docker container execute the next command in the directory with documentation:

docker run \
--rm \
-v $(pwd):/app \
funbox/crafter -f json doc-file.apib

The default working directory of the image is set to /app, therefore it is easier to mount a host directory into the /app. Then just a filename as a parameter will do.

Docker container in Windows

To run a container in Windows, add a slash (/) before pwd. The command will look like this:

docker run \
--rm \
-v /$(pwd):/app/doc \
funbox/crafter -f json doc/doc-file.apib

There is a chance that the mounted directory is empty. In this case, check that your hard drive is marked as shared. This setting can be found in the settings of Docker Desktop for Windows, Shared Drives section. If the disk is not shared, mark it as shared, apply changes, and restart Docker Desktop.

Why API Blueprint

We use JSON API widely in the company, so each day our developers face such issues as describing and approving API documentation, tracking changes, distributing documentation among partners, and so on. That is why we felt a strong need for convenient tools to work with documentation.

Historically, the battle was between API Blueprint and Swagger. We chose API Blueprint for two reasons. Firstly, the source code of documentation that is described using API Blueprint is more readable to humans. Secondly, at the time of research conducted, Swagger lacked several important features, as One Of support.

Credits

Awesome logo for the project was made by Igor Garybaldi.

Sponsored by FunBox

About

API Blueprint parser written in pure JavaScript

Topics

Resources

Stars

13 stars

Watchers

9 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - funbox/crafter: API Blueprint parser written in pure JavaScript · GitHub
Skip to content

Latest commit

History

1,368 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

@funboxteam/crafter

npm (scoped)Coverage Status

Crafter avatar

Crafter is an API Blueprint parser written in pure JavaScript. It is a replacement for Drafter library with some handy features added.

По-русски

Rationale

Drafter is written in C++, so the code is pretty complicated and obscure while containing a lot of bugs and legacy. It is hard to understand how some of its parts work. And if bug fixes are welcomed by maintainers, adding a new feature could become an obstacle.

Our company has a tiny percent of C++ projects, so almost none of the developers can maintain Drafter.

That is why we decided to create own JavaScript replacement which eliminates all previously described limitations, is easy to maintain, and allows us to add all needed features.

Features

Compared to Drafter, this library can offer some important features:

  • Modules. Now it is possible to split one giant file into parts and inject APIB files into each other, which makes documentation easy to use.
  • Resource Prototypes allow you to set up common responses in one place and reuse them through the documentation.
  • Support of arrays in query strings.
  • JSON Schema based types. In case of complex types it is possible to describe them directly as JSON Schema.
  • String validation attributes that describe the expected length of parameters and regular expressions they should match.
  • Describe a non-HTTP interaction (as WebSocket) by means of Message section.

Additional information about how the library works is placed in the docs directory.

Installation

Global install:

npm install -g @funboxteam/crafter

Local install:

npm install --save @funboxteam/crafter

Usage

Node.js

Parse a file:

constcrafter=require('@funboxteam/crafter');constapibFile='doc.apib';constast=(awaitcrafter.parseFile(apibFile))[0].toRefract();

Or provide a string variable containing APIB documentation:

constcrafter=require('@funboxteam/crafter');constsource='# My API\n\n## List users [GET /users]\n\n+ Response 200';constast=(awaitcrafter.parse(source))[0].toRefract();

CLI

To parse a file named doc.apib run the next command:

crafter [options] doc.apib

Options

  • -f, --format <format> — set output format of the parse result. Available formats: json, yaml. Default is yaml.
  • -s, --sourcemap — export source maps in the parse result.
  • -d, --debug — enable debugging mode, which disables catching some of the exceptions.
  • -l, --langserver — enable tolerant mode, which is used in language server.
  • -h, --help — output usage information.

Run tests

npm test

Run in Docker

To run @funboxteam/crafter as a Docker container execute the next command in the directory with documentation:

docker run \
--rm \
-v $(pwd):/app \
funbox/crafter -f json doc-file.apib

The default working directory of the image is set to /app, therefore it is easier to mount a host directory into the /app. Then just a filename as a parameter will do.

Docker container in Windows

To run a container in Windows, add a slash (/) before pwd. The command will look like this:

docker run \
--rm \
-v /$(pwd):/app/doc \
funbox/crafter -f json doc/doc-file.apib

There is a chance that the mounted directory is empty. In this case, check that your hard drive is marked as shared. This setting can be found in the settings of Docker Desktop for Windows, Shared Drives section. If the disk is not shared, mark it as shared, apply changes, and restart Docker Desktop.

Why API Blueprint

We use JSON API widely in the company, so each day our developers face such issues as describing and approving API documentation, tracking changes, distributing documentation among partners, and so on. That is why we felt a strong need for convenient tools to work with documentation.

Historically, the battle was between API Blueprint and Swagger. We chose API Blueprint for two reasons. Firstly, the source code of documentation that is described using API Blueprint is more readable to humans. Secondly, at the time of research conducted, Swagger lacked several important features, as One Of support.

Credits

Awesome logo for the project was made by Igor Garybaldi.

Sponsored by FunBox

About

API Blueprint parser written in pure JavaScript

Topics

Resources

Stars

13 stars

Watchers

9 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - funbox/crafter: API Blueprint parser written in pure JavaScript · GitHub
Skip to content

Latest commit

History

1,368 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

@funboxteam/crafter

npm (scoped)Coverage Status

Crafter avatar

Crafter is an API Blueprint parser written in pure JavaScript. It is a replacement for Drafter library with some handy features added.

По-русски

Rationale

Drafter is written in C++, so the code is pretty complicated and obscure while containing a lot of bugs and legacy. It is hard to understand how some of its parts work. And if bug fixes are welcomed by maintainers, adding a new feature could become an obstacle.

Our company has a tiny percent of C++ projects, so almost none of the developers can maintain Drafter.

That is why we decided to create own JavaScript replacement which eliminates all previously described limitations, is easy to maintain, and allows us to add all needed features.

Features

Compared to Drafter, this library can offer some important features:

  • Modules. Now it is possible to split one giant file into parts and inject APIB files into each other, which makes documentation easy to use.
  • Resource Prototypes allow you to set up common responses in one place and reuse them through the documentation.
  • Support of arrays in query strings.
  • JSON Schema based types. In case of complex types it is possible to describe them directly as JSON Schema.
  • String validation attributes that describe the expected length of parameters and regular expressions they should match.
  • Describe a non-HTTP interaction (as WebSocket) by means of Message section.

Additional information about how the library works is placed in the docs directory.

Installation

Global install:

npm install -g @funboxteam/crafter

Local install:

npm install --save @funboxteam/crafter

Usage

Node.js

Parse a file:

constcrafter=require('@funboxteam/crafter');constapibFile='doc.apib';constast=(awaitcrafter.parseFile(apibFile))[0].toRefract();

Or provide a string variable containing APIB documentation:

constcrafter=require('@funboxteam/crafter');constsource='# My API\n\n## List users [GET /users]\n\n+ Response 200';constast=(awaitcrafter.parse(source))[0].toRefract();

CLI

To parse a file named doc.apib run the next command:

crafter [options] doc.apib

Options

  • -f, --format <format> — set output format of the parse result. Available formats: json, yaml. Default is yaml.
  • -s, --sourcemap — export source maps in the parse result.
  • -d, --debug — enable debugging mode, which disables catching some of the exceptions.
  • -l, --langserver — enable tolerant mode, which is used in language server.
  • -h, --help — output usage information.

Run tests

npm test

Run in Docker

To run @funboxteam/crafter as a Docker container execute the next command in the directory with documentation:

docker run \
--rm \
-v $(pwd):/app \
funbox/crafter -f json doc-file.apib

The default working directory of the image is set to /app, therefore it is easier to mount a host directory into the /app. Then just a filename as a parameter will do.

Docker container in Windows

To run a container in Windows, add a slash (/) before pwd. The command will look like this:

docker run \
--rm \
-v /$(pwd):/app/doc \
funbox/crafter -f json doc/doc-file.apib

There is a chance that the mounted directory is empty. In this case, check that your hard drive is marked as shared. This setting can be found in the settings of Docker Desktop for Windows, Shared Drives section. If the disk is not shared, mark it as shared, apply changes, and restart Docker Desktop.

Why API Blueprint

We use JSON API widely in the company, so each day our developers face such issues as describing and approving API documentation, tracking changes, distributing documentation among partners, and so on. That is why we felt a strong need for convenient tools to work with documentation.

Historically, the battle was between API Blueprint and Swagger. We chose API Blueprint for two reasons. Firstly, the source code of documentation that is described using API Blueprint is more readable to humans. Secondly, at the time of research conducted, Swagger lacked several important features, as One Of support.

Credits

Awesome logo for the project was made by Igor Garybaldi.

Sponsored by FunBox

About

API Blueprint parser written in pure JavaScript

Topics

Resources

Stars

13 stars

Watchers

9 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - funbox/crafter: API Blueprint parser written in pure JavaScript · GitHub
Skip to content

Latest commit

History

1,368 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

@funboxteam/crafter

npm (scoped)Coverage Status

Crafter avatar

Crafter is an API Blueprint parser written in pure JavaScript. It is a replacement for Drafter library with some handy features added.

По-русски

Rationale

Drafter is written in C++, so the code is pretty complicated and obscure while containing a lot of bugs and legacy. It is hard to understand how some of its parts work. And if bug fixes are welcomed by maintainers, adding a new feature could become an obstacle.

Our company has a tiny percent of C++ projects, so almost none of the developers can maintain Drafter.

That is why we decided to create own JavaScript replacement which eliminates all previously described limitations, is easy to maintain, and allows us to add all needed features.

Features

Compared to Drafter, this library can offer some important features:

  • Modules. Now it is possible to split one giant file into parts and inject APIB files into each other, which makes documentation easy to use.
  • Resource Prototypes allow you to set up common responses in one place and reuse them through the documentation.
  • Support of arrays in query strings.
  • JSON Schema based types. In case of complex types it is possible to describe them directly as JSON Schema.
  • String validation attributes that describe the expected length of parameters and regular expressions they should match.
  • Describe a non-HTTP interaction (as WebSocket) by means of Message section.

Additional information about how the library works is placed in the docs directory.

Installation

Global install:

npm install -g @funboxteam/crafter

Local install:

npm install --save @funboxteam/crafter

Usage

Node.js

Parse a file:

constcrafter=require('@funboxteam/crafter');constapibFile='doc.apib';constast=(awaitcrafter.parseFile(apibFile))[0].toRefract();

Or provide a string variable containing APIB documentation:

constcrafter=require('@funboxteam/crafter');constsource='# My API\n\n## List users [GET /users]\n\n+ Response 200';constast=(awaitcrafter.parse(source))[0].toRefract();

CLI

To parse a file named doc.apib run the next command:

crafter [options] doc.apib

Options

  • -f, --format <format> — set output format of the parse result. Available formats: json, yaml. Default is yaml.
  • -s, --sourcemap — export source maps in the parse result.
  • -d, --debug — enable debugging mode, which disables catching some of the exceptions.
  • -l, --langserver — enable tolerant mode, which is used in language server.
  • -h, --help — output usage information.

Run tests

npm test

Run in Docker

To run @funboxteam/crafter as a Docker container execute the next command in the directory with documentation:

docker run \
--rm \
-v $(pwd):/app \
funbox/crafter -f json doc-file.apib

The default working directory of the image is set to /app, therefore it is easier to mount a host directory into the /app. Then just a filename as a parameter will do.

Docker container in Windows

To run a container in Windows, add a slash (/) before pwd. The command will look like this:

docker run \
--rm \
-v /$(pwd):/app/doc \
funbox/crafter -f json doc/doc-file.apib

There is a chance that the mounted directory is empty. In this case, check that your hard drive is marked as shared. This setting can be found in the settings of Docker Desktop for Windows, Shared Drives section. If the disk is not shared, mark it as shared, apply changes, and restart Docker Desktop.

Why API Blueprint

We use JSON API widely in the company, so each day our developers face such issues as describing and approving API documentation, tracking changes, distributing documentation among partners, and so on. That is why we felt a strong need for convenient tools to work with documentation.

Historically, the battle was between API Blueprint and Swagger. We chose API Blueprint for two reasons. Firstly, the source code of documentation that is described using API Blueprint is more readable to humans. Secondly, at the time of research conducted, Swagger lacked several important features, as One Of support.

Credits

Awesome logo for the project was made by Igor Garybaldi.

Sponsored by FunBox

About

API Blueprint parser written in pure JavaScript

Topics

Resources

Stars

13 stars

Watchers

9 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - funbox/crafter: API Blueprint parser written in pure JavaScript · GitHub
Skip to content

Latest commit

History

1,368 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

@funboxteam/crafter

npm (scoped)Coverage Status

Crafter avatar

Crafter is an API Blueprint parser written in pure JavaScript. It is a replacement for Drafter library with some handy features added.

По-русски

Rationale

Drafter is written in C++, so the code is pretty complicated and obscure while containing a lot of bugs and legacy. It is hard to understand how some of its parts work. And if bug fixes are welcomed by maintainers, adding a new feature could become an obstacle.

Our company has a tiny percent of C++ projects, so almost none of the developers can maintain Drafter.

That is why we decided to create own JavaScript replacement which eliminates all previously described limitations, is easy to maintain, and allows us to add all needed features.

Features

Compared to Drafter, this library can offer some important features:

  • Modules. Now it is possible to split one giant file into parts and inject APIB files into each other, which makes documentation easy to use.
  • Resource Prototypes allow you to set up common responses in one place and reuse them through the documentation.
  • Support of arrays in query strings.
  • JSON Schema based types. In case of complex types it is possible to describe them directly as JSON Schema.
  • String validation attributes that describe the expected length of parameters and regular expressions they should match.
  • Describe a non-HTTP interaction (as WebSocket) by means of Message section.

Additional information about how the library works is placed in the docs directory.

Installation

Global install:

npm install -g @funboxteam/crafter

Local install:

npm install --save @funboxteam/crafter

Usage

Node.js

Parse a file:

constcrafter=require('@funboxteam/crafter');constapibFile='doc.apib';constast=(awaitcrafter.parseFile(apibFile))[0].toRefract();

Or provide a string variable containing APIB documentation:

constcrafter=require('@funboxteam/crafter');constsource='# My API\n\n## List users [GET /users]\n\n+ Response 200';constast=(awaitcrafter.parse(source))[0].toRefract();

CLI

To parse a file named doc.apib run the next command:

crafter [options] doc.apib

Options

  • -f, --format <format> — set output format of the parse result. Available formats: json, yaml. Default is yaml.
  • -s, --sourcemap — export source maps in the parse result.
  • -d, --debug — enable debugging mode, which disables catching some of the exceptions.
  • -l, --langserver — enable tolerant mode, which is used in language server.
  • -h, --help — output usage information.

Run tests

npm test

Run in Docker

To run @funboxteam/crafter as a Docker container execute the next command in the directory with documentation:

docker run \
--rm \
-v $(pwd):/app \
funbox/crafter -f json doc-file.apib

The default working directory of the image is set to /app, therefore it is easier to mount a host directory into the /app. Then just a filename as a parameter will do.

Docker container in Windows

To run a container in Windows, add a slash (/) before pwd. The command will look like this:

docker run \
--rm \
-v /$(pwd):/app/doc \
funbox/crafter -f json doc/doc-file.apib

There is a chance that the mounted directory is empty. In this case, check that your hard drive is marked as shared. This setting can be found in the settings of Docker Desktop for Windows, Shared Drives section. If the disk is not shared, mark it as shared, apply changes, and restart Docker Desktop.

Why API Blueprint

We use JSON API widely in the company, so each day our developers face such issues as describing and approving API documentation, tracking changes, distributing documentation among partners, and so on. That is why we felt a strong need for convenient tools to work with documentation.

Historically, the battle was between API Blueprint and Swagger. We chose API Blueprint for two reasons. Firstly, the source code of documentation that is described using API Blueprint is more readable to humans. Secondly, at the time of research conducted, Swagger lacked several important features, as One Of support.

Credits

Awesome logo for the project was made by Igor Garybaldi.

Sponsored by FunBox

About

API Blueprint parser written in pure JavaScript

Topics

Resources

Stars

13 stars

Watchers

9 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - funbox/crafter: API Blueprint parser written in pure JavaScript · GitHub
Skip to content

Latest commit

History

1,368 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

@funboxteam/crafter

npm (scoped)Coverage Status

Crafter avatar

Crafter is an API Blueprint parser written in pure JavaScript. It is a replacement for Drafter library with some handy features added.

По-русски

Rationale

Drafter is written in C++, so the code is pretty complicated and obscure while containing a lot of bugs and legacy. It is hard to understand how some of its parts work. And if bug fixes are welcomed by maintainers, adding a new feature could become an obstacle.

Our company has a tiny percent of C++ projects, so almost none of the developers can maintain Drafter.

That is why we decided to create own JavaScript replacement which eliminates all previously described limitations, is easy to maintain, and allows us to add all needed features.

Features

Compared to Drafter, this library can offer some important features:

  • Modules. Now it is possible to split one giant file into parts and inject APIB files into each other, which makes documentation easy to use.
  • Resource Prototypes allow you to set up common responses in one place and reuse them through the documentation.
  • Support of arrays in query strings.
  • JSON Schema based types. In case of complex types it is possible to describe them directly as JSON Schema.
  • String validation attributes that describe the expected length of parameters and regular expressions they should match.
  • Describe a non-HTTP interaction (as WebSocket) by means of Message section.

Additional information about how the library works is placed in the docs directory.

Installation

Global install:

npm install -g @funboxteam/crafter

Local install:

npm install --save @funboxteam/crafter

Usage

Node.js

Parse a file:

constcrafter=require('@funboxteam/crafter');constapibFile='doc.apib';constast=(awaitcrafter.parseFile(apibFile))[0].toRefract();

Or provide a string variable containing APIB documentation:

constcrafter=require('@funboxteam/crafter');constsource='# My API\n\n## List users [GET /users]\n\n+ Response 200';constast=(awaitcrafter.parse(source))[0].toRefract();

CLI

To parse a file named doc.apib run the next command:

crafter [options] doc.apib

Options

  • -f, --format <format> — set output format of the parse result. Available formats: json, yaml. Default is yaml.
  • -s, --sourcemap — export source maps in the parse result.
  • -d, --debug — enable debugging mode, which disables catching some of the exceptions.
  • -l, --langserver — enable tolerant mode, which is used in language server.
  • -h, --help — output usage information.

Run tests

npm test

Run in Docker

To run @funboxteam/crafter as a Docker container execute the next command in the directory with documentation:

docker run \
--rm \
-v $(pwd):/app \
funbox/crafter -f json doc-file.apib

The default working directory of the image is set to /app, therefore it is easier to mount a host directory into the /app. Then just a filename as a parameter will do.

Docker container in Windows

To run a container in Windows, add a slash (/) before pwd. The command will look like this:

docker run \
--rm \
-v /$(pwd):/app/doc \
funbox/crafter -f json doc/doc-file.apib

There is a chance that the mounted directory is empty. In this case, check that your hard drive is marked as shared. This setting can be found in the settings of Docker Desktop for Windows, Shared Drives section. If the disk is not shared, mark it as shared, apply changes, and restart Docker Desktop.

Why API Blueprint

We use JSON API widely in the company, so each day our developers face such issues as describing and approving API documentation, tracking changes, distributing documentation among partners, and so on. That is why we felt a strong need for convenient tools to work with documentation.

Historically, the battle was between API Blueprint and Swagger. We chose API Blueprint for two reasons. Firstly, the source code of documentation that is described using API Blueprint is more readable to humans. Secondly, at the time of research conducted, Swagger lacked several important features, as One Of support.

Credits

Awesome logo for the project was made by Igor Garybaldi.

Sponsored by FunBox

About

API Blueprint parser written in pure JavaScript

Topics

Resources

Stars

13 stars

Watchers

9 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - funbox/crafter: API Blueprint parser written in pure JavaScript · GitHub
Skip to content

Latest commit

History

1,368 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

@funboxteam/crafter

npm (scoped)Coverage Status

Crafter avatar

Crafter is an API Blueprint parser written in pure JavaScript. It is a replacement for Drafter library with some handy features added.

По-русски

Rationale

Drafter is written in C++, so the code is pretty complicated and obscure while containing a lot of bugs and legacy. It is hard to understand how some of its parts work. And if bug fixes are welcomed by maintainers, adding a new feature could become an obstacle.

Our company has a tiny percent of C++ projects, so almost none of the developers can maintain Drafter.

That is why we decided to create own JavaScript replacement which eliminates all previously described limitations, is easy to maintain, and allows us to add all needed features.

Features

Compared to Drafter, this library can offer some important features:

  • Modules. Now it is possible to split one giant file into parts and inject APIB files into each other, which makes documentation easy to use.
  • Resource Prototypes allow you to set up common responses in one place and reuse them through the documentation.
  • Support of arrays in query strings.
  • JSON Schema based types. In case of complex types it is possible to describe them directly as JSON Schema.
  • String validation attributes that describe the expected length of parameters and regular expressions they should match.
  • Describe a non-HTTP interaction (as WebSocket) by means of Message section.

Additional information about how the library works is placed in the docs directory.

Installation

Global install:

npm install -g @funboxteam/crafter

Local install:

npm install --save @funboxteam/crafter

Usage

Node.js

Parse a file:

constcrafter=require('@funboxteam/crafter');constapibFile='doc.apib';constast=(awaitcrafter.parseFile(apibFile))[0].toRefract();

Or provide a string variable containing APIB documentation:

constcrafter=require('@funboxteam/crafter');constsource='# My API\n\n## List users [GET /users]\n\n+ Response 200';constast=(awaitcrafter.parse(source))[0].toRefract();

CLI

To parse a file named doc.apib run the next command:

crafter [options] doc.apib

Options

  • -f, --format <format> — set output format of the parse result. Available formats: json, yaml. Default is yaml.
  • -s, --sourcemap — export source maps in the parse result.
  • -d, --debug — enable debugging mode, which disables catching some of the exceptions.
  • -l, --langserver — enable tolerant mode, which is used in language server.
  • -h, --help — output usage information.

Run tests

npm test

Run in Docker

To run @funboxteam/crafter as a Docker container execute the next command in the directory with documentation:

docker run \
--rm \
-v $(pwd):/app \
funbox/crafter -f json doc-file.apib

The default working directory of the image is set to /app, therefore it is easier to mount a host directory into the /app. Then just a filename as a parameter will do.

Docker container in Windows

To run a container in Windows, add a slash (/) before pwd. The command will look like this:

docker run \
--rm \
-v /$(pwd):/app/doc \
funbox/crafter -f json doc/doc-file.apib

There is a chance that the mounted directory is empty. In this case, check that your hard drive is marked as shared. This setting can be found in the settings of Docker Desktop for Windows, Shared Drives section. If the disk is not shared, mark it as shared, apply changes, and restart Docker Desktop.

Why API Blueprint

We use JSON API widely in the company, so each day our developers face such issues as describing and approving API documentation, tracking changes, distributing documentation among partners, and so on. That is why we felt a strong need for convenient tools to work with documentation.

Historically, the battle was between API Blueprint and Swagger. We chose API Blueprint for two reasons. Firstly, the source code of documentation that is described using API Blueprint is more readable to humans. Secondly, at the time of research conducted, Swagger lacked several important features, as One Of support.

Credits

Awesome logo for the project was made by Igor Garybaldi.

Sponsored by FunBox

About

API Blueprint parser written in pure JavaScript

Topics

Resources

Stars

13 stars

Watchers

9 watching

Forks

Used by

Contributors

Languages