bump-cli 2.7.3-beta.1 → 2.7.3
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/lib/args.d.ts +1 -5
- package/lib/args.js +1 -6
- package/lib/definition.d.ts +3 -9
- package/lib/definition.js +1 -9
- package/lib/index.d.ts +1 -2
- package/lib/index.js +1 -3
- package/oclif.manifest.json +1 -1
- package/package.json +1 -5
- package/lib/commands/overlay.d.ts +0 -14
- package/lib/commands/overlay.js +0 -48
- package/lib/core/overlay.d.ts +0 -2
- package/lib/core/overlay.js +0 -69
package/lib/args.d.ts
CHANGED
package/lib/args.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.otherFileArg = exports.fileArg = void 0;
|
|
4
4
|
const fileArg = {
|
|
5
5
|
name: 'FILE',
|
|
6
6
|
required: true,
|
|
@@ -12,8 +12,3 @@ const otherFileArg = {
|
|
|
12
12
|
description: 'Path or URL to a second API documentation file to compute its diff',
|
|
13
13
|
};
|
|
14
14
|
exports.otherFileArg = otherFileArg;
|
|
15
|
-
const overlayFileArg = {
|
|
16
|
-
name: 'OVERLAY_FILE',
|
|
17
|
-
description: 'Path or URL to an overlay file',
|
|
18
|
-
};
|
|
19
|
-
exports.overlayFileArg = overlayFileArg;
|
package/lib/definition.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import $RefParser from '@apidevtools/json-schema-ref-parser';
|
|
2
|
-
import { JSONSchema4, JSONSchema4Object,
|
|
2
|
+
import { JSONSchema4, JSONSchema4Object, JSONSchema6, JSONSchema6Object, JSONSchema7 } from 'json-schema';
|
|
3
3
|
declare type SpecSchema = JSONSchema4 | JSONSchema6 | JSONSchema7;
|
|
4
4
|
declare class SupportedFormat {
|
|
5
5
|
static readonly openapi: Record<string, SpecSchema>;
|
|
@@ -22,7 +22,6 @@ declare class API {
|
|
|
22
22
|
resolveContent($refs: $RefParser.$Refs): [string, APIDefinition];
|
|
23
23
|
static isOpenAPI(definition: JSONSchema4Object | JSONSchema6Object): definition is OpenAPI;
|
|
24
24
|
static isAsyncAPI(definition: JSONSchema4Object | JSONSchema6Object): definition is AsyncAPI;
|
|
25
|
-
static isOpenAPIOverlay(definition: JSONSchema4Object | JSONSchema6Object): definition is OpenAPIOverlay;
|
|
26
25
|
extractDefinition(): [string, APIReference[]];
|
|
27
26
|
static load(path: string): Promise<API>;
|
|
28
27
|
}
|
|
@@ -30,19 +29,14 @@ declare type APIReference = {
|
|
|
30
29
|
location: string;
|
|
31
30
|
content: string;
|
|
32
31
|
};
|
|
33
|
-
declare type APIDefinition = OpenAPI | AsyncAPI
|
|
32
|
+
declare type APIDefinition = OpenAPI | AsyncAPI;
|
|
34
33
|
declare type OpenAPI = JSONSchema4Object & {
|
|
35
34
|
readonly openapi?: string;
|
|
36
35
|
readonly swagger?: string;
|
|
37
36
|
readonly info: string;
|
|
38
37
|
};
|
|
39
|
-
declare type OpenAPIOverlay = JSONSchema4Object & {
|
|
40
|
-
readonly overlay: string;
|
|
41
|
-
readonly info: string;
|
|
42
|
-
readonly actions: JSONSchema4Array;
|
|
43
|
-
};
|
|
44
38
|
declare type AsyncAPI = JSONSchema4Object & {
|
|
45
39
|
readonly asyncapi: string;
|
|
46
40
|
readonly info: string;
|
|
47
41
|
};
|
|
48
|
-
export { API,
|
|
42
|
+
export { API, SupportedFormat };
|
package/lib/definition.js
CHANGED
|
@@ -53,9 +53,6 @@ class API {
|
|
|
53
53
|
if (API.isAsyncAPI(definition)) {
|
|
54
54
|
return SupportedFormat.asyncapi[this.versionWithoutPatch()];
|
|
55
55
|
}
|
|
56
|
-
else if (API.isOpenAPIOverlay(definition)) {
|
|
57
|
-
return { overlay: { type: 'string' } };
|
|
58
|
-
}
|
|
59
56
|
else {
|
|
60
57
|
return SupportedFormat.openapi[this.versionWithoutPatch()];
|
|
61
58
|
}
|
|
@@ -128,9 +125,7 @@ class API {
|
|
|
128
125
|
if (!parsed || !(parsed instanceof Object) || !('info' in parsed)) {
|
|
129
126
|
throw new UnsupportedFormat("Definition needs to be an object with at least an 'info' key");
|
|
130
127
|
}
|
|
131
|
-
if (!API.isOpenAPI(parsed) &&
|
|
132
|
-
!API.isAsyncAPI(parsed) &&
|
|
133
|
-
!API.isOpenAPIOverlay(parsed)) {
|
|
128
|
+
if (!API.isOpenAPI(parsed) && !API.isAsyncAPI(parsed)) {
|
|
134
129
|
throw new UnsupportedFormat();
|
|
135
130
|
}
|
|
136
131
|
return [raw, parsed];
|
|
@@ -141,9 +136,6 @@ class API {
|
|
|
141
136
|
static isAsyncAPI(definition) {
|
|
142
137
|
return 'asyncapi' in definition;
|
|
143
138
|
}
|
|
144
|
-
static isOpenAPIOverlay(definition) {
|
|
145
|
-
return 'overlay' in definition;
|
|
146
|
-
}
|
|
147
139
|
extractDefinition() {
|
|
148
140
|
const references = [];
|
|
149
141
|
for (let i = 0; i < this.references.length; i++) {
|
package/lib/index.d.ts
CHANGED
|
@@ -2,6 +2,5 @@ import { run } from '@oclif/command';
|
|
|
2
2
|
import { Diff } from './core/diff';
|
|
3
3
|
import Deploy from './commands/deploy';
|
|
4
4
|
import Preview from './commands/preview';
|
|
5
|
-
import Overlay from './commands/overlay';
|
|
6
5
|
export { VersionResponse, PreviewResponse, DiffResponse, WithDiff } from './api/models';
|
|
7
|
-
export { run, Deploy, Diff, Preview
|
|
6
|
+
export { run, Deploy, Diff, Preview };
|
package/lib/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.Preview = exports.Diff = exports.Deploy = exports.run = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const command_1 = require("@oclif/command");
|
|
6
6
|
Object.defineProperty(exports, "run", { enumerable: true, get: function () { return command_1.run; } });
|
|
@@ -10,5 +10,3 @@ const deploy_1 = (0, tslib_1.__importDefault)(require("./commands/deploy"));
|
|
|
10
10
|
exports.Deploy = deploy_1.default;
|
|
11
11
|
const preview_1 = (0, tslib_1.__importDefault)(require("./commands/preview"));
|
|
12
12
|
exports.Preview = preview_1.default;
|
|
13
|
-
const overlay_1 = (0, tslib_1.__importDefault)(require("./commands/overlay"));
|
|
14
|
-
exports.Overlay = overlay_1.default;
|
package/oclif.manifest.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"2.7.3
|
|
1
|
+
{"version":"2.7.3","commands":{"deploy":{"id":"deploy","description":"Create a new version of your documentation from the given file or URL.","pluginName":"bump-cli","pluginType":"core","aliases":[],"examples":["Deploy a new version of an existing documentation\n\n$ bump deploy FILE --doc <your_doc_id_or_slug> --token <your_doc_token>\n* Let's deploy a new documentation version on Bump... done\n* Your new documentation version will soon be ready\n","Deploy a new version of an existing documentation attached to a hub\n\n$ bump deploy FILE --doc <doc_slug> --hub <your_hub_id_or_slug> --token <your_doc_token>\n* Let's deploy a new documentation version on Bump... done\n* Your new documentation version will soon be ready\n","Deploy a whole directory of API definitions files to a hub\n\n$ bump deploy DIR --filename-pattern *-{slug}-api --hub <hub_slug> --token <hub_token>\nWe've found 2 valid API definitions to deploy\n└─ DIR\n └─ source-my-service-api.yml (OpenAPI spec version 3.1.0)\n └─ source-my-jobs-service-api.yml (AsyncAPI spec version 2.6.0)\n\nLet's deploy those documentations to your <hub_slug> hub on Bump.sh\n\n* Your new documentation version will soon be ready\nLet's deploy a new version to your my-service documentation on Bump.sh... done\n\n* Your new documentation version will soon be ready\nLet's deploy a new version to your my-jobs-service documentation on Bump.sh... done\n","Validate a new documentation version before deploying it\n\n$ bump deploy FILE --dry-run --doc <doc_slug> --token <your_doc_token>\n* Let's validate a new documentation version on Bump... done\n* Definition is valid\n"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"show CLI help","allowNo":false},"doc":{"name":"doc","type":"option","char":"d","description":"Documentation public id or slug. Can be provided via BUMP_ID environment variable"},"doc-name":{"name":"doc-name","type":"option","char":"n","description":"Documentation name. Used with --auto-create flag."},"hub":{"name":"hub","type":"option","char":"b","description":"Hub id or slug. Can be provided via BUMP_HUB_ID environment variable"},"branch":{"name":"branch","type":"option","char":"B","description":"Branch name. Can be provided via BUMP_BRANCH_NAME environment variable"},"token":{"name":"token","type":"option","char":"t","description":"Documentation or Hub token. Can be provided via BUMP_TOKEN environment variable","required":true},"auto-create":{"name":"auto-create","type":"boolean","description":"Automatically create the documentation if needed (only available with a --hub flag). Documentation name can be provided with --doc-name flag. Default: false","allowNo":false},"interactive":{"name":"interactive","type":"boolean","description":"Interactively create a configuration file to deploy a Hub (only available with a --hub flag). This will start an interactive process if you don't have a CLI configuration file. Default: false","allowNo":false},"filename-pattern":{"name":"filename-pattern","type":"option","description":"Pattern to extract the documentation slug from filenames when deploying a DIRECTORY. Pattern uses only '*' and '{slug}' as special characters to extract the slug from a filename without extension. Used with --hub flag only.","default":"{slug}-api"},"dry-run":{"name":"dry-run","type":"boolean","description":"Validate a new documentation version. Does everything a normal deploy would do except publishing the new version. Useful in automated environments such as test platforms or continuous integration. Default: false","allowNo":false}},"args":[{"name":"FILE","description":"Path or URL to your API documentation file. OpenAPI (2.0 to 3.1.0) and AsyncAPI (2.x) specifications are currently supported.\nPath can also be a directory when deploying to a Hub.","required":true}]},"diff":{"id":"diff","description":"Get a comparison diff with your documentation from the given file or URL.","pluginName":"bump-cli","pluginType":"core","aliases":[],"examples":["Compare a potential new version with the currently published one:\n\n $ bump diff FILE --doc <your_doc_id_or_slug> --token <your_doc_token>\n * Comparing the given definition file with the currently deployed one... done\n Removed: GET /compare\n Added: GET /versions/{versionId}\n","Store the diff in a dedicated file:\n\n $ bump diff FILE --doc <doc_slug> --token <doc_token> > /tmp/my-saved-diff\n * Comparing the given definition file with the currently deployed one... done\n\n $ cat /tmp/my-saved-diff\n Removed: GET /compare\n Added: GET /versions/{versionId}\n","In case of a non modified definition FILE compared to your existing documentation, no changes are output:\n\n $ bump diff FILE --doc <doc_slug> --token <your_doc_token>\n * Comparing the given definition file with the currently deployed one... done\n › Warning: Your documentation has not changed\n","Compare two different input files or URL independently to the one published on bump.sh\n\n $ bump diff FILE FILE2 --doc <doc_slug> --token <your_doc_token>\n * Comparing the two given definition files... done\n Updated: POST /versions\n Body attribute added: previous_version_id\n"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"show CLI help","allowNo":false},"doc":{"name":"doc","type":"option","char":"d","description":"Documentation public id or slug. Can be provided via BUMP_ID environment variable"},"hub":{"name":"hub","type":"option","char":"b","description":"Hub id or slug. Can be provided via BUMP_HUB_ID environment variable"},"branch":{"name":"branch","type":"option","char":"B","description":"Branch name. Can be provided via BUMP_BRANCH_NAME environment variable"},"token":{"name":"token","type":"option","char":"t","description":"Documentation or Hub token. Can be provided via BUMP_TOKEN environment variable","required":false},"open":{"name":"open","type":"boolean","char":"o","description":"Open the visual diff in your browser","allowNo":false},"fail-on-breaking":{"name":"fail-on-breaking","type":"boolean","char":"F","description":"Fail when diff contains a breaking change","allowNo":false},"format":{"name":"format","type":"option","char":"f","description":"Format in which to provide the diff result","options":["text","markdown","json","html"],"default":"text"},"expires":{"name":"expires","type":"option","char":"e","description":"Specify a longer expiration date for public diffs (defaults to 1 day). Use iso8601 format to provide a date, or you can use `--expires 'never'` to keep the result live indefinitely."}},"args":[{"name":"FILE","description":"Path or URL to your API documentation file. OpenAPI (2.0 to 3.1.0) and AsyncAPI (2.x) specifications are currently supported.\nPath can also be a directory when deploying to a Hub.","required":true},{"name":"FILE2","description":"Path or URL to a second API documentation file to compute its diff"}]},"preview":{"id":"preview","description":"Create a documentation preview from the given file or URL.","pluginName":"bump-cli","pluginType":"core","aliases":[],"examples":["$ bump preview FILE\n* Your preview is visible at: https://bump.sh/preview/45807371-9a32-48a7-b6e4-1cb7088b5b9b\n"],"flags":{"help":{"name":"help","type":"boolean","char":"h","description":"show CLI help","allowNo":false},"live":{"name":"live","type":"boolean","char":"l","description":"Generate a preview each time you save the given file","allowNo":false},"open":{"name":"open","type":"boolean","char":"o","description":"Open the generated preview URL in your browser","allowNo":false}},"args":[{"name":"FILE","description":"Path or URL to your API documentation file. OpenAPI (2.0 to 3.1.0) and AsyncAPI (2.x) specifications are currently supported.\nPath can also be a directory when deploying to a Hub.","required":true}]}}}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bump-cli",
|
|
3
3
|
"description": "The Bump CLI is used to interact with your API documentation hosted on Bump by using the API of developers.bump.sh",
|
|
4
|
-
"version": "2.7.3
|
|
4
|
+
"version": "2.7.3",
|
|
5
5
|
"author": "Paul Bonaud <paulr@bump.sh>",
|
|
6
6
|
"bin": {
|
|
7
7
|
"bump": "./bin/run"
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
"@oclif/dev-cli": "^1.26.0",
|
|
12
12
|
"@oclif/test": "^2.0.3",
|
|
13
13
|
"@types/debug": "^4.1.5",
|
|
14
|
-
"@types/jsonpath": "^0.2.4",
|
|
15
14
|
"@types/mocha": "^10.0.0",
|
|
16
15
|
"@types/node": "^20.7.0",
|
|
17
16
|
"@typescript-eslint/eslint-plugin": "^5.21.0",
|
|
@@ -90,12 +89,9 @@
|
|
|
90
89
|
"@oclif/core": "1.20.4",
|
|
91
90
|
"@oclif/plugin-help": "^5.1.10",
|
|
92
91
|
"@oclif/plugin-warn-if-update-available": "^2.0.36",
|
|
93
|
-
"@stoplight/yaml": "^4.2.3",
|
|
94
92
|
"async-mutex": "^0.4.0",
|
|
95
93
|
"axios": "^0.27.2",
|
|
96
94
|
"debug": "^4.3.1",
|
|
97
|
-
"jsonpath": "^1.1.1",
|
|
98
|
-
"mergician": "^1.0.3",
|
|
99
95
|
"oas-schemas": "git+https://git@github.com/OAI/OpenAPI-Specification.git#0f9d3ec7c033fef184ec54e1ffc201b2d61ce023",
|
|
100
96
|
"tslib": "^2.3.0"
|
|
101
97
|
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import Command from '../command';
|
|
2
|
-
export default class Overlay extends Command {
|
|
3
|
-
static description: string;
|
|
4
|
-
static examples: string[];
|
|
5
|
-
static flags: {
|
|
6
|
-
help: import("@oclif/parser/lib/flags").IBooleanFlag<void>;
|
|
7
|
-
};
|
|
8
|
-
static args: {
|
|
9
|
-
name: string;
|
|
10
|
-
description: string;
|
|
11
|
-
}[];
|
|
12
|
-
run(): Promise<void>;
|
|
13
|
-
applyOverlay(file: string, overlayFile: string): Promise<string>;
|
|
14
|
-
}
|
package/lib/commands/overlay.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
const errors_1 = require("@oclif/errors");
|
|
5
|
-
const yaml_1 = require("@stoplight/yaml");
|
|
6
|
-
const definition_1 = require("../definition");
|
|
7
|
-
const command_1 = (0, tslib_1.__importDefault)(require("../command"));
|
|
8
|
-
const flagsBuilder = (0, tslib_1.__importStar)(require("../flags"));
|
|
9
|
-
const args_1 = require("../args");
|
|
10
|
-
const cli_1 = require("../cli");
|
|
11
|
-
const overlay_1 = require("../core/overlay");
|
|
12
|
-
class Overlay extends command_1.default {
|
|
13
|
-
async run() {
|
|
14
|
-
const { args } = this.parse(Overlay);
|
|
15
|
-
const newDefinition = await this.applyOverlay(args.FILE, args.OVERLAY_FILE);
|
|
16
|
-
cli_1.cli.log(newDefinition);
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
async applyOverlay(file, overlayFile) {
|
|
20
|
-
const api = await definition_1.API.load(file);
|
|
21
|
-
const definition = api.definition;
|
|
22
|
-
this.d(`${file} looks like an ${api.specName} spec version ${api.version}`);
|
|
23
|
-
const overlay = await definition_1.API.load(overlayFile);
|
|
24
|
-
const overlayDefinition = overlay.definition;
|
|
25
|
-
if (!definition_1.API.isOpenAPIOverlay(overlayDefinition)) {
|
|
26
|
-
throw new errors_1.CLIError(`${overlayFile} does not look like an OpenAPI overlay`);
|
|
27
|
-
}
|
|
28
|
-
cli_1.cli.action.start("* Let's apply the overlay to the main definition");
|
|
29
|
-
const newDefinition = (0, overlay_1.applyOverlay)(definition, overlayDefinition);
|
|
30
|
-
cli_1.cli.action.stop();
|
|
31
|
-
if (file.endsWith('.json')) {
|
|
32
|
-
return JSON.stringify(newDefinition);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
return (0, yaml_1.safeStringify)(newDefinition);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
exports.default = Overlay;
|
|
40
|
-
Overlay.description = 'Apply an OpenAPI specified overlay to your API definition.';
|
|
41
|
-
Overlay.examples = [
|
|
42
|
-
`$ bump overlay DEFINITION_FILE OVERLAY_FILE
|
|
43
|
-
`,
|
|
44
|
-
];
|
|
45
|
-
Overlay.flags = {
|
|
46
|
-
help: flagsBuilder.help({ char: 'h' }),
|
|
47
|
-
};
|
|
48
|
-
Overlay.args = [args_1.fileArg, args_1.overlayFileArg];
|
package/lib/core/overlay.d.ts
DELETED
package/lib/core/overlay.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.applyOverlay = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
// WIP @github.com/lornajane/openapi-overlays-js
|
|
6
|
-
//
|
|
7
|
-
// I couldn't get the upstream lib to be imported properly due to some
|
|
8
|
-
// issues with ESM module imports so this is file was copied from
|
|
9
|
-
// github.com/lornajane/openapi-overlays-js and has been adapted to
|
|
10
|
-
// make our Typescript build happy.
|
|
11
|
-
//
|
|
12
|
-
// If you make any changes here, please also make them upstream.
|
|
13
|
-
const jsonpath_1 = (0, tslib_1.__importDefault)(require("jsonpath"));
|
|
14
|
-
const mergician_1 = (0, tslib_1.__importDefault)(require("mergician"));
|
|
15
|
-
function applyOverlay(spec, overlay) {
|
|
16
|
-
// Use jsonpath.apply to do the changes
|
|
17
|
-
if (overlay.actions && overlay.actions.length >= 1)
|
|
18
|
-
overlay.actions.forEach((a) => {
|
|
19
|
-
const action = a;
|
|
20
|
-
if (!action.target) {
|
|
21
|
-
process.stderr.write('Action with a missing target\n');
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
const target = action.target;
|
|
25
|
-
// Is it a remove?
|
|
26
|
-
if (action.hasOwnProperty('remove')) {
|
|
27
|
-
while (true) {
|
|
28
|
-
const path = jsonpath_1.default.paths(spec, target, 1);
|
|
29
|
-
if (path.length == 0) {
|
|
30
|
-
break;
|
|
31
|
-
}
|
|
32
|
-
const parent = jsonpath_1.default.parent(spec, target);
|
|
33
|
-
const thingToRemove = path[0][path[0].length - 1];
|
|
34
|
-
if (Array.isArray(parent)) {
|
|
35
|
-
parent.splice(thingToRemove, 1);
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
delete parent[thingToRemove];
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
try {
|
|
44
|
-
// It must be an update
|
|
45
|
-
jsonpath_1.default.apply(spec, target, (chunk) => {
|
|
46
|
-
if (typeof chunk === 'object' && typeof action.update === 'object') {
|
|
47
|
-
if (Array.isArray(chunk) && Array.isArray(action.update)) {
|
|
48
|
-
return chunk.concat(action.update);
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
// Deep merge objects using a module (built-in spread operator is only shallow)
|
|
52
|
-
const merger = (0, mergician_1.default)({ appendArrays: true });
|
|
53
|
-
return merger(chunk, action.update);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
return action.update;
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
catch (ex) {
|
|
62
|
-
process.stderr.write(`Error applying overlay: ${ex.message}\n`);
|
|
63
|
-
//return chunk
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
return spec;
|
|
68
|
-
}
|
|
69
|
-
exports.applyOverlay = applyOverlay;
|