Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
"parserOptions": {
"ecmaVersion": 2017
},

"plugins": [
"security",
"jsdoc",
Expand All @@ -13,6 +12,25 @@
"node": true,
"es6": true
},
"overrides": [
{
"files": ["*.ts"],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 2020,
"sourceType": "module",
"project": "./tsconfig.json"
},
"plugins": ["@typescript-eslint"],
"rules": {
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": "error",
"no-use-before-define": "off",
"require-jsdoc": "warn",
"valid-jsdoc": "warn"
}
}
],
"rules": {
// Possible Errors
"comma-dangle": ["error", "never"],
Expand Down
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,7 @@ test/data/.temp

# Prevent unit test coverage reports from being added
.coverage
.nyc_output
.nyc_output

# TypeScript build output
dist
2 changes: 1 addition & 1 deletion bin/openapi2postmanv2.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env node
var _ = require('lodash'),
program = require('commander'),
Converter = require('../index.js'),
Converter = require('../dist/index.js'),
fs = require('fs'),
path = require('path'),
availableOptions = require('../lib/options').getOptions('use', { usage: ['CONVERSION'] }),
Expand Down
78 changes: 0 additions & 78 deletions index.js

This file was deleted.

96 changes: 96 additions & 0 deletions index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
'use strict';

import _ from 'lodash';
import type {
SpecInput,
FolderInput,
MultiFileSpecInput,
Options,
ValidationResult,
ConversionCallback,
MetadataCallback,
MergeAndValidateCallback,
OptionsCriteria,
OptionDefinition,
OptionsUseMode,
RootFiles,
RelatedFiles,
BundledContent
} from './types';

const { MODULE_VERSION } = require('../lib/schemapack.js');
const SchemaPack = require('../lib/schemapack.js').SchemaPack;
const UserError = require('../lib/common/UserError');
Comment on lines +21 to +23
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The require paths use '../lib/' but should use './lib/' since index.ts is at the project root, not in a subdirectory. These incorrect paths will cause module resolution failures at runtime.

Suggested change
const { MODULE_VERSION } = require('../lib/schemapack.js');
const SchemaPack = require('../lib/schemapack.js').SchemaPack;
const UserError = require('../lib/common/UserError');
const { MODULE_VERSION } = require('./lib/schemapack.js');
const SchemaPack = require('./lib/schemapack.js').SchemaPack;
const UserError = require('./lib/common/UserError');

Copilot uses AI. Check for mistakes.
Comment on lines +21 to +23
Copy link

Copilot AI Dec 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The require statements use relative paths starting with '../lib/' but these files are now at './lib/' relative to index.ts in the project root. These paths will fail at runtime since the compiled JavaScript will be in the dist directory.

Suggested change
const { MODULE_VERSION } = require('../lib/schemapack.js');
const SchemaPack = require('../lib/schemapack.js').SchemaPack;
const UserError = require('../lib/common/UserError');
const { MODULE_VERSION } = require('./lib/schemapack.js');
const SchemaPack = require('./lib/schemapack.js').SchemaPack;
const UserError = require('./lib/common/UserError');

Copilot uses AI. Check for mistakes.

const DEFAULT_INVALID_ERROR = 'Provided definition is invalid';

module.exports = {
// Old API wrapping the new API

convert: function(input: SpecInput, options: Options, cb: ConversionCallback): void {
var schema = new SchemaPack(input, options);

if (schema.validated) {
return schema.convert(cb);
}
return cb(new UserError(_.get(schema, 'validationResult.reason', DEFAULT_INVALID_ERROR)));
},

convertV2: function(input: SpecInput, options: Options, cb: ConversionCallback): void {
var schema = new SchemaPack(input, options, MODULE_VERSION.V2);

if (schema.validated) {
return schema.convertV2(cb);
}

return cb(new UserError(_.get(schema, 'validationResult.reason', DEFAULT_INVALID_ERROR)));
},

convertV2WithTypes: function(input: SpecInput, options: Options, cb: ConversionCallback): void {
const enableTypeFetching = true;
var schema = new SchemaPack(input, options, MODULE_VERSION.V2, enableTypeFetching);

if (schema.validated) {
return schema.convertV2(cb);
}

return cb(new UserError(_.get(schema, 'validationResult.reason', DEFAULT_INVALID_ERROR)));
},

validate: function (input: SpecInput): ValidationResult {
var schema = new SchemaPack(input);
return schema.validationResult;
},

getMetaData: function (input: SpecInput | FolderInput, cb: MetadataCallback): void {
var schema = new SchemaPack(input);
schema.getMetaData(cb);
},

mergeAndValidate: function (input: FolderInput, cb: MergeAndValidateCallback): void {
var schema = new SchemaPack(input);
schema.mergeAndValidate(cb);
},

getOptions: function(mode?: string, criteria?: OptionsCriteria): OptionDefinition[] | OptionsUseMode {
return SchemaPack.getOptions(mode, criteria);
},

detectRootFiles: async function(input: MultiFileSpecInput): Promise<RootFiles> {
var schema = new SchemaPack(input);
return schema.detectRootFiles();
},

detectRelatedFiles: async function(input: MultiFileSpecInput): Promise<RelatedFiles> {
var schema = new SchemaPack(input);
return schema.detectRelatedFiles();
},

bundle: async function(input: MultiFileSpecInput & { options?: Options }): Promise<BundledContent> {
Copy link

Copilot AI Dec 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The parameter type uses intersection with an inline type which is inconsistent with the defined MultiFileSpecInput interface. Consider adding an 'options' field directly to MultiFileSpecInput or creating a separate BundleInput type.

Copilot uses AI. Check for mistakes.
var schema = new SchemaPack(input, input.options ?? {});
return schema.bundle();
},

// new API
SchemaPack
};
2 changes: 1 addition & 1 deletion lib/schemaUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -779,7 +779,7 @@ module.exports = {
schemaCache,
variableStore,
true
),
)
);
}
}
Expand Down
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any reason to move this ?

File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
const generateAuthForCollectionFromOpenAPI = require('./helpers/collection/generateAuthForCollectionFromOpenAPI');
const utils = require('./utils');
const generateAuthForCollectionFromOpenAPI = require('./helpers/collection/generateAuthForCollectionFromOpenAPI.js');
const utils = require('./utils.js');

const schemaFaker = require('../assets/json-schema-faker'),
const schemaFaker = require('../../assets/json-schema-faker.js'),
_ = require('lodash'),
mergeAllOf = require('json-schema-merge-allof'),
xmlFaker = require('./xmlSchemaFaker.js'),
xmlFaker = require('../xmlSchemaFaker.js'),
Comment on lines +2 to +7
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You wouldn't require extensions for js files

URLENCODED = 'application/x-www-form-urlencoded',
{ DEFAULT_RESPONSE_CODE_IN_OAS } = require('../lib/common/schemaUtilsCommon.js'),
{ DEFAULT_RESPONSE_CODE_IN_OAS } = require('../../lib/common/schemaUtilsCommon.js'),
APP_JSON = 'application/json',
APP_JS = 'application/javascript',
TEXT_XML = 'text/xml',
Expand Down Expand Up @@ -895,6 +895,7 @@ let QUERYPARAM = 'query',
else if (propValue.properties) {
let processedProperties = processSchema(propValue);
propertyDetails.properties = processedProperties.properties;
// eslint-disable-next-line max-depth
if (processedProperties.required) {
propertyDetails.required = processedProperties.required;
}
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,23 @@ const _ = require('lodash'),
{ Variable } = require('postman-collection/lib/collection/variable'),
async = require('async'),
crypto = require('crypto'),
schemaFaker = require('../assets/json-schema-faker.js'),
xmlFaker = require('./xmlSchemaFaker.js'),
utils = require('./utils'),
schemaFaker = require('../../assets/json-schema-faker.js'),
xmlFaker = require('../xmlSchemaFaker.js'),
utils = require('./utils.js'),
{
resolveSchema,
resolveRefFromSchema,
resolvePostmanRequest,
resolveResponseForPostmanRequest
} = require('./schemaUtils'),
concreteUtils = require('../lib/30XUtils/schemaUtils30X'),
} = require('./schemaUtils.js'),
concreteUtils = require('../../lib/30XUtils/schemaUtils30X.js'),

ajvValidationError = require('../lib/ajValidation/ajvValidationError'),
{ validateSchema } = require('../lib/ajValidation/ajvValidation'),
ajvValidationError = require('../../lib/ajValidation/ajvValidationError.js'),
{ validateSchema } = require('../../lib/ajValidation/ajvValidation.js'),
{ formatDataPath, checkIsCorrectType, isKnownType,
getServersPathVars, DEFAULT_RESPONSE_CODE_IN_OAS } = require('../lib/common/schemaUtilsCommon.js'),
getServersPathVars, DEFAULT_RESPONSE_CODE_IN_OAS } = require('../../lib/common/schemaUtilsCommon.js'),

{ findMatchingRequestFromSchema, isPmVariable } = require('./requestMatchingUtils'),
{ findMatchingRequestFromSchema, isPmVariable } = require('./requestMatchingUtils.js'),

// common global constants
SCHEMA_FORMATS = {
Expand Down
14 changes: 8 additions & 6 deletions libV2/index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
const _ = require('lodash'),
{ Collection } = require('postman-collection/lib/collection/collection'),
GraphLib = require('graphlib'),
generateSkeletonTreeFromOpenAPI = require('./helpers/collection/generateSkeletionTreeFromOpenAPI'),
generateCollectionFromOpenAPI = require('./helpers/collection/generateCollectionFromOpenAPI'),
generateFolderFromOpenAPI = require('./helpers/folder/generateFolderForOpenAPI'),
generateSkeletonTreeFromOpenAPI =
require('./CollectionGeneration/helpers/collection/generateSkeletionTreeFromOpenAPI'),
generateCollectionFromOpenAPI =
require('./CollectionGeneration/helpers/collection/generateCollectionFromOpenAPI'),
generateFolderFromOpenAPI = require('./CollectionGeneration/helpers/folder/generateFolderForOpenAPI'),

Ajv = require('ajv'),
addFormats = require('ajv-formats'),
Expand All @@ -12,10 +14,10 @@ const _ = require('lodash'),

// All V1 interfaces used
OpenApiErr = require('../lib/error'),
{ validateTransaction, getMissingSchemaEndpoints } = require('./validationUtils');
{ validateTransaction, getMissingSchemaEndpoints } = require('./CollectionGeneration/validationUtils');

const { resolvePostmanRequest, resolveRefFromSchema } = require('./schemaUtils');
const { generateRequestItemObject, fixPathVariablesInUrl } = require('./utils');
const { resolvePostmanRequest, resolveRefFromSchema } = require('./CollectionGeneration/schemaUtils');
const { generateRequestItemObject, fixPathVariablesInUrl } = require('./CollectionGeneration/utils');

module.exports = {
convertV2: function (context, cb) {
Expand Down
Loading