jsii-rosetta 5.4.32-dev.4 → 5.5.1-dev.0
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/commands/convert.js +1 -2
- package/lib/commands/convert.js.map +1 -1
- package/lib/commands/coverage.js +1 -2
- package/lib/commands/coverage.js.map +1 -1
- package/lib/commands/extract.js +2 -3
- package/lib/commands/extract.js.map +1 -1
- package/lib/commands/infuse.js +2 -2
- package/lib/commands/infuse.js.map +1 -1
- package/lib/commands/read.js +1 -2
- package/lib/commands/read.js.map +1 -1
- package/lib/commands/transliterate.js +1 -2
- package/lib/commands/transliterate.js.map +1 -1
- package/lib/commands/trim-cache.js +1 -2
- package/lib/commands/trim-cache.js.map +1 -1
- package/lib/find-utils.js +4 -5
- package/lib/find-utils.js.map +1 -1
- package/lib/fixtures.js +1 -2
- package/lib/fixtures.js.map +1 -1
- package/lib/jsii/assemblies.js +9 -9
- package/lib/jsii/assemblies.js.map +1 -1
- package/lib/jsii/jsii-types.js +2 -3
- package/lib/jsii/jsii-types.js.map +1 -1
- package/lib/jsii/jsii-utils.js +15 -16
- package/lib/jsii/jsii-utils.js.map +1 -1
- package/lib/jsii/packages.js +1 -2
- package/lib/jsii/packages.js.map +1 -1
- package/lib/json.d.ts +0 -2
- package/lib/json.js +2 -3
- package/lib/json.js.map +1 -1
- package/lib/languages/target-language.js +3 -3
- package/lib/languages/target-language.js.map +1 -1
- package/lib/logging.js +6 -6
- package/lib/logging.js.map +1 -1
- package/lib/markdown/escapes.js +2 -3
- package/lib/markdown/escapes.js.map +1 -1
- package/lib/markdown/extract-snippets.js +1 -2
- package/lib/markdown/extract-snippets.js.map +1 -1
- package/lib/markdown/index.js +3 -4
- package/lib/markdown/index.js.map +1 -1
- package/lib/markdown/markdown-renderer.js +5 -5
- package/lib/markdown/markdown-renderer.js.map +1 -1
- package/lib/markdown/markdown.js +5 -6
- package/lib/markdown/markdown.js.map +1 -1
- package/lib/o-tree.js +2 -2
- package/lib/o-tree.js.map +1 -1
- package/lib/renderer.js +2 -2
- package/lib/renderer.js.map +1 -1
- package/lib/rosetta-reader.d.ts +0 -1
- package/lib/snippet-dependencies.js +5 -6
- package/lib/snippet-dependencies.js.map +1 -1
- package/lib/snippet-selectors.js +4 -5
- package/lib/snippet-selectors.js.map +1 -1
- package/lib/snippet.js +11 -11
- package/lib/snippet.js.map +1 -1
- package/lib/strict.js +1 -2
- package/lib/strict.js.map +1 -1
- package/lib/support.js +1 -2
- package/lib/support.js.map +1 -1
- package/lib/tablets/key.js +1 -2
- package/lib/tablets/key.js.map +1 -1
- package/lib/translate.js +4 -4
- package/lib/translate.js.map +1 -1
- package/lib/translate_all.js +1 -2
- package/lib/translate_all.js.map +1 -1
- package/lib/translate_all_worker.js +1 -2
- package/lib/translate_all_worker.js.map +1 -1
- package/lib/typescript/ast-utils.d.ts +1 -1
- package/lib/typescript/ast-utils.js +23 -23
- package/lib/typescript/ast-utils.js.map +1 -1
- package/lib/typescript/imports.d.ts +2 -2
- package/lib/typescript/imports.js +2 -3
- package/lib/typescript/imports.js.map +1 -1
- package/lib/typescript/types.js +16 -17
- package/lib/typescript/types.js.map +1 -1
- package/lib/typescript/visible-spans.js +4 -4
- package/lib/typescript/visible-spans.js.map +1 -1
- package/lib/util.d.ts +0 -1
- package/lib/util.js +19 -19
- package/lib/util.js.map +1 -1
- package/package.json +3 -3
- package/releases.json +2 -2
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/typescript/types.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript';\n\nimport { hasAllFlags, hasAnyFlag, resolveEnumLiteral, resolvedSymbolAtLocation } from '../jsii/jsii-utils';\nimport { isDefined } from '../util';\n\n/**\n * Return the first non-undefined type from a union\n */\nexport function firstTypeInUnion(typeChecker: ts.TypeChecker, type: ts.Type): ts.Type {\n type = typeChecker.getNonNullableType(type);\n\n if (!type.isUnion()) {\n return type;\n }\n\n return type.types[0];\n}\n\nexport type BuiltInType = 'any' | 'boolean' | 'number' | 'string' | 'void';\nexport function builtInTypeName(type: ts.Type): BuiltInType | undefined {\n if (hasAnyFlag(type.flags, ts.TypeFlags.Any | ts.TypeFlags.Unknown)) {\n return 'any';\n }\n if (hasAnyFlag(type.flags, ts.TypeFlags.BooleanLike)) {\n return 'boolean';\n }\n if (hasAnyFlag(type.flags, ts.TypeFlags.NumberLike)) {\n return 'number';\n }\n if (hasAnyFlag(type.flags, ts.TypeFlags.StringLike)) {\n return 'string';\n }\n return undefined;\n}\n\nexport function renderType(type: ts.Type): string {\n if (type.isClassOrInterface()) {\n return type.symbol.name;\n }\n if (type.isLiteral()) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n return `${type.value}`;\n }\n return renderTypeFlags(type);\n}\n\nexport function parameterAcceptsUndefined(param: ts.ParameterDeclaration, type?: ts.Type): boolean {\n if (param.initializer !== undefined) {\n return true;\n }\n if (param.questionToken !== undefined) {\n return true;\n }\n if (type) {\n return typeContainsUndefined(type);\n }\n return false;\n}\n\n/**\n * This is a simplified check that should be good enough for most purposes\n */\nexport function typeContainsUndefined(type: ts.Type): boolean {\n if (type.getFlags() & ts.TypeFlags.Undefined) {\n return true;\n }\n if (type.isUnion()) {\n return type.types.some(typeContainsUndefined);\n }\n return false;\n}\n\nexport function renderTypeFlags(type: ts.Type): string {\n return renderFlags(type.flags, ts.TypeFlags);\n}\n\nexport type MapAnalysis = { result: 'nonMap' } | { result: 'map'; elementType: ts.Type | undefined };\n\n/**\n * If this is a map type, return the type mapped *to* (key must always be `string` anyway).\n */\nexport function mapElementType(type: ts.Type, typeChecker: ts.TypeChecker): MapAnalysis {\n if (hasAnyFlag(type.flags, ts.TypeFlags.Object) && type.symbol) {\n if (type.symbol.name === '__type') {\n // Declared map type: {[k: string]: A}\n return { result: 'map', elementType: type.getStringIndexType() };\n }\n\n if (type.symbol.name === '__object') {\n // Derived map type from object literal: typeof({ k: \"value\" })\n // For every property, get the node that created it (PropertyAssignment), and get the type of the initializer of that node\n const initializerTypes = type.getProperties().map((p) => {\n const expression = p.valueDeclaration ?? p.declarations![0];\n return typeOfObjectLiteralProperty(typeChecker, expression);\n });\n return {\n result: 'map',\n elementType: typeIfSame([...initializerTypes, type.getStringIndexType()].filter(isDefined)),\n };\n }\n }\n\n return { result: 'nonMap' };\n}\n\n/**\n * Try to infer the map element type from the properties if they're all the same\n */\nexport function inferMapElementType(\n elements: readonly ts.ObjectLiteralElementLike[],\n typeChecker: ts.TypeChecker,\n): ts.Type | undefined {\n const types = elements.map((e) => typeOfObjectLiteralProperty(typeChecker, e)).filter(isDefined);\n\n return types.every((t) => isSameType(types[0], t)) ? types[0] : undefined;\n}\n\nfunction typeOfObjectLiteralProperty(typeChecker: ts.TypeChecker, el: ts.Node): ts.Type | undefined {\n if (ts.isPropertyAssignment(el)) {\n return typeOfExpression(typeChecker, el.initializer);\n }\n if (ts.isShorthandPropertyAssignment(el)) {\n return typeOfExpression(typeChecker, el.name);\n }\n return undefined;\n}\n\nfunction isSameType(a: ts.Type, b: ts.Type) {\n return a.flags === b.flags && a.symbol?.name === b.symbol?.name;\n}\n\nfunction typeIfSame(types: Array<ts.Type | undefined>): ts.Type | undefined {\n const ttypes = types.filter(isDefined);\n if (types.length === 0) {\n return undefined;\n }\n\n return ttypes.every((t) => isSameType(ttypes[0], t)) ? ttypes[0] : undefined;\n}\n\n/**\n * If this is an array type, return the element type of the array\n */\nexport function arrayElementType(type: ts.Type): ts.Type | undefined {\n if (type.symbol && type.symbol.name === 'Array') {\n const tr = type as ts.TypeReference;\n return tr.aliasTypeArguments && tr.aliasTypeArguments[0];\n }\n return undefined;\n}\n\nexport function typeOfExpression(typeChecker: ts.TypeChecker, node: ts.Expression) {\n const t = typeChecker.getContextualType(node) ?? typeChecker.getTypeAtLocation(node);\n return resolveEnumLiteral(typeChecker, t);\n}\n\n/**\n * Infer type of expression by the argument it is assigned to\n *\n * If the type of the expression can include undefined (if the value is\n * optional), `undefined` will be removed from the union.\n *\n * (Will return undefined for object literals not unified with a declared type)\n */\nexport function inferredTypeOfExpression(typeChecker: ts.TypeChecker, node: ts.Expression) {\n const type = typeChecker.getContextualType(node);\n return type ? typeChecker.getNonNullableType(type) : undefined;\n}\n\nexport function isNumber(x: any): x is number {\n return typeof x === 'number';\n}\n\nexport function isEnumAccess(typeChecker: ts.TypeChecker, access: ts.PropertyAccessExpression) {\n const symbol = resolvedSymbolAtLocation(typeChecker, access.expression);\n return symbol ? hasAnyFlag(symbol.flags, ts.SymbolFlags.Enum) : false;\n}\n\nexport function isStaticReadonlyAccess(typeChecker: ts.TypeChecker, access: ts.PropertyAccessExpression) {\n const symbol = resolvedSymbolAtLocation(typeChecker, access);\n const decl = symbol?.getDeclarations();\n if (decl && decl[0] && ts.isPropertyDeclaration(decl[0])) {\n const flags = ts.getCombinedModifierFlags(decl[0]);\n return hasAllFlags(flags, ts.ModifierFlags.Readonly | ts.ModifierFlags.Static);\n }\n return false;\n}\n\nexport function renderFlags(flags: number | undefined, flagObject: Record<string, number | string>) {\n if (flags === undefined) {\n return '';\n }\n\n return Object.values(flagObject)\n .filter(isNumber)\n .filter((f) => hasAllFlags(flags, f))\n .map((f) => flagObject[f])\n .join(',');\n}\n\nexport function determineReturnType(typeChecker: ts.TypeChecker, node: ts.SignatureDeclaration): ts.Type | undefined {\n const signature = typeChecker.getSignatureFromDeclaration(node);\n if (!signature) {\n return undefined;\n }\n return typeChecker.getReturnTypeOfSignature(signature);\n}\n"]}
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/typescript/types.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript';\n\nimport { hasAllFlags, hasAnyFlag, resolveEnumLiteral, resolvedSymbolAtLocation } from '../jsii/jsii-utils';\nimport { isDefined } from '../util';\n\n/**\n * Return the first non-undefined type from a union\n */\nexport function firstTypeInUnion(typeChecker: ts.TypeChecker, type: ts.Type): ts.Type {\n type = typeChecker.getNonNullableType(type);\n\n if (!type.isUnion()) {\n return type;\n }\n\n return type.types[0];\n}\n\nexport type BuiltInType = 'any' | 'boolean' | 'number' | 'string' | 'void';\nexport function builtInTypeName(type: ts.Type): BuiltInType | undefined {\n if (hasAnyFlag(type.flags, ts.TypeFlags.Any | ts.TypeFlags.Unknown)) {\n return 'any';\n }\n if (hasAnyFlag(type.flags, ts.TypeFlags.BooleanLike)) {\n return 'boolean';\n }\n if (hasAnyFlag(type.flags, ts.TypeFlags.NumberLike)) {\n return 'number';\n }\n if (hasAnyFlag(type.flags, ts.TypeFlags.StringLike)) {\n return 'string';\n }\n return undefined;\n}\n\nexport function renderType(type: ts.Type): string {\n if (type.isClassOrInterface()) {\n return type.symbol.name;\n }\n if (type.isLiteral()) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n return `${type.value}`;\n }\n return renderTypeFlags(type);\n}\n\nexport function parameterAcceptsUndefined(param: ts.ParameterDeclaration, type?: ts.Type): boolean {\n if (param.initializer !== undefined) {\n return true;\n }\n if (param.questionToken !== undefined) {\n return true;\n }\n if (type) {\n return typeContainsUndefined(type);\n }\n return false;\n}\n\n/**\n * This is a simplified check that should be good enough for most purposes\n */\nexport function typeContainsUndefined(type: ts.Type): boolean {\n if (type.getFlags() & ts.TypeFlags.Undefined) {\n return true;\n }\n if (type.isUnion()) {\n return type.types.some(typeContainsUndefined);\n }\n return false;\n}\n\nexport function renderTypeFlags(type: ts.Type): string {\n return renderFlags(type.flags, ts.TypeFlags);\n}\n\nexport type MapAnalysis = { result: 'nonMap' } | { result: 'map'; elementType: ts.Type | undefined };\n\n/**\n * If this is a map type, return the type mapped *to* (key must always be `string` anyway).\n */\nexport function mapElementType(type: ts.Type, typeChecker: ts.TypeChecker): MapAnalysis {\n if (hasAnyFlag(type.flags, ts.TypeFlags.Object) && type.symbol) {\n if (type.symbol.name === '__type') {\n // Declared map type: {[k: string]: A}\n return { result: 'map', elementType: type.getStringIndexType() };\n }\n\n if (type.symbol.name === '__object') {\n // Derived map type from object literal: typeof({ k: \"value\" })\n // For every property, get the node that created it (PropertyAssignment), and get the type of the initializer of that node\n const initializerTypes = type.getProperties().map((p) => {\n const expression = p.valueDeclaration ?? p.declarations![0];\n return typeOfObjectLiteralProperty(typeChecker, expression);\n });\n return {\n result: 'map',\n elementType: typeIfSame([...initializerTypes, type.getStringIndexType()].filter(isDefined)),\n };\n }\n }\n\n return { result: 'nonMap' };\n}\n\n/**\n * Try to infer the map element type from the properties if they're all the same\n */\nexport function inferMapElementType(\n elements: readonly ts.ObjectLiteralElementLike[],\n typeChecker: ts.TypeChecker,\n): ts.Type | undefined {\n const types = elements.map((e) => typeOfObjectLiteralProperty(typeChecker, e)).filter(isDefined);\n\n return types.every((t) => isSameType(types[0], t)) ? types[0] : undefined;\n}\n\nfunction typeOfObjectLiteralProperty(typeChecker: ts.TypeChecker, el: ts.Node): ts.Type | undefined {\n if (ts.isPropertyAssignment(el)) {\n return typeOfExpression(typeChecker, el.initializer);\n }\n if (ts.isShorthandPropertyAssignment(el)) {\n return typeOfExpression(typeChecker, el.name);\n }\n return undefined;\n}\n\nfunction isSameType(a: ts.Type, b: ts.Type) {\n return a.flags === b.flags && a.symbol?.name === b.symbol?.name;\n}\n\nfunction typeIfSame(types: Array<ts.Type | undefined>): ts.Type | undefined {\n const ttypes = types.filter(isDefined);\n if (types.length === 0) {\n return undefined;\n }\n\n return ttypes.every((t) => isSameType(ttypes[0], t)) ? ttypes[0] : undefined;\n}\n\n/**\n * If this is an array type, return the element type of the array\n */\nexport function arrayElementType(type: ts.Type): ts.Type | undefined {\n if (type.symbol && type.symbol.name === 'Array') {\n const tr = type as ts.TypeReference;\n return tr.aliasTypeArguments && tr.aliasTypeArguments[0];\n }\n return undefined;\n}\n\nexport function typeOfExpression(typeChecker: ts.TypeChecker, node: ts.Expression) {\n const t = typeChecker.getContextualType(node) ?? typeChecker.getTypeAtLocation(node);\n return resolveEnumLiteral(typeChecker, t);\n}\n\n/**\n * Infer type of expression by the argument it is assigned to\n *\n * If the type of the expression can include undefined (if the value is\n * optional), `undefined` will be removed from the union.\n *\n * (Will return undefined for object literals not unified with a declared type)\n */\nexport function inferredTypeOfExpression(typeChecker: ts.TypeChecker, node: ts.Expression) {\n const type = typeChecker.getContextualType(node);\n return type ? typeChecker.getNonNullableType(type) : undefined;\n}\n\nexport function isNumber(x: any): x is number {\n return typeof x === 'number';\n}\n\nexport function isEnumAccess(typeChecker: ts.TypeChecker, access: ts.PropertyAccessExpression) {\n const symbol = resolvedSymbolAtLocation(typeChecker, access.expression);\n return symbol ? hasAnyFlag(symbol.flags, ts.SymbolFlags.Enum) : false;\n}\n\nexport function isStaticReadonlyAccess(typeChecker: ts.TypeChecker, access: ts.PropertyAccessExpression) {\n const symbol = resolvedSymbolAtLocation(typeChecker, access);\n const decl = symbol?.getDeclarations();\n if (decl && decl[0] && ts.isPropertyDeclaration(decl[0])) {\n const flags = ts.getCombinedModifierFlags(decl[0]);\n return hasAllFlags(flags, ts.ModifierFlags.Readonly | ts.ModifierFlags.Static);\n }\n return false;\n}\n\nexport function renderFlags(flags: number | undefined, flagObject: Record<string, number | string>) {\n if (flags === undefined) {\n return '';\n }\n\n return Object.values(flagObject)\n .filter(isNumber)\n .filter((f) => hasAllFlags(flags, f))\n .map((f) => flagObject[f])\n .join(',');\n}\n\nexport function determineReturnType(typeChecker: ts.TypeChecker, node: ts.SignatureDeclaration): ts.Type | undefined {\n const signature = typeChecker.getSignatureFromDeclaration(node);\n if (!signature) {\n return undefined;\n }\n return typeChecker.getReturnTypeOfSignature(signature);\n}\n"]}
|
@@ -1,6 +1,9 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
3
|
+
exports.Spans = void 0;
|
4
|
+
exports.trimCompleteSourceToVisible = trimCompleteSourceToVisible;
|
5
|
+
exports.spanInside = spanInside;
|
6
|
+
exports.spanContains = spanContains;
|
4
7
|
/**
|
5
8
|
* A class representing a set of non-overlapping Spans.
|
6
9
|
*/
|
@@ -84,7 +87,6 @@ function trimCompleteSourceToVisible(source) {
|
|
84
87
|
.join('')
|
85
88
|
.trimRight();
|
86
89
|
}
|
87
|
-
exports.trimCompleteSourceToVisible = trimCompleteSourceToVisible;
|
88
90
|
function calculateMarkedSpans(source) {
|
89
91
|
const regEx = /^[ \t]*[/]{3}[ \t]*(!(?:show|hide))[ \t]*$/gm;
|
90
92
|
const ret = new Array();
|
@@ -120,9 +122,7 @@ function calculateMarkedSpans(source) {
|
|
120
122
|
function spanInside(a, b) {
|
121
123
|
return b.start <= a.start && a.end <= b.end;
|
122
124
|
}
|
123
|
-
exports.spanInside = spanInside;
|
124
125
|
function spanContains(a, position) {
|
125
126
|
return a.start <= position && position < a.end;
|
126
127
|
}
|
127
|
-
exports.spanContains = spanContains;
|
128
128
|
//# sourceMappingURL=visible-spans.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"visible-spans.js","sourceRoot":"","sources":["../../src/typescript/visible-spans.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"visible-spans.js","sourceRoot":"","sources":["../../src/typescript/visible-spans.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript';\n\nimport { Span } from '../o-tree';\n\n/**\n * A class representing a set of non-overlapping Spans.\n */\nexport class Spans {\n /**\n * Derive visible spans from marked source (`/// !show` and `/// !hide` directives).\n */\n public static visibleSpansFromSource(source: string) {\n return new Spans(calculateMarkedSpans(source).filter((s) => s.visible));\n }\n\n public constructor(private readonly _spans: Span[]) {\n _spans.sort((a, b) => a.start - b.start);\n\n // Merge adjacent spans\n let i = 0;\n while (i < this._spans.length - 1) {\n const current = this._spans[i];\n const next = this._spans[i + 1];\n\n if (current.end === next.start) {\n // Replace these two with a new, merged one\n this._spans.splice(i, 2, {\n start: current.start,\n end: next.end,\n });\n } else {\n // Else advance\n i++;\n }\n }\n }\n\n public get spans(): readonly Span[] {\n return this._spans;\n }\n\n /**\n * Whether another span is fully contained within this set of spans\n */\n public fullyContainsSpan(span: Span) {\n const candidate = this.findSpan(span.start);\n return !!candidate && spanInside(span, candidate);\n }\n\n public containsPosition(pos: number) {\n const candidate = this.findSpan(pos);\n return !!candidate && spanContains(candidate, pos);\n }\n\n /**\n * Return whether the START of the given node is visible\n *\n * For nodes that potentially span many lines (like class declarations)\n * this will check the first line.\n */\n public containsStartOfNode(node: ts.Node) {\n return this.containsPosition(node.getStart());\n }\n\n /**\n * Find the span that would contain the given position, if any\n *\n * Returns the highest span s.t. span.start <= position. Uses the fact that\n * spans are non-overlapping.\n */\n private findSpan(position: number): Span | undefined {\n // For now, using linear search as the amount of spans is rather trivial.\n // Change to binary search if this ever becomes an issue\n if (this.spans.length === 0 || position < this._spans[0].start) {\n return undefined;\n }\n\n let candidate = this._spans[0];\n let i = 1;\n while (i < this.spans.length && this.spans[i].start <= position) {\n candidate = this._spans[i];\n i++;\n }\n return candidate;\n }\n}\n\nexport function trimCompleteSourceToVisible(source: string): string {\n const spans = Spans.visibleSpansFromSource(source);\n\n return spans.spans\n .map((span) => source.substring(span.start, span.end))\n .join('')\n .trimRight();\n}\n\nexport interface MarkedSpan {\n start: number;\n end: number;\n visible: boolean;\n}\n\nfunction calculateMarkedSpans(source: string): MarkedSpan[] {\n const regEx = /^[ \\t]*[/]{3}[ \\t]*(!(?:show|hide))[ \\t]*$/gm;\n\n const ret = new Array<MarkedSpan>();\n let match;\n let spanStart;\n let visible = true;\n while ((match = regEx.exec(source)) != null) {\n const directiveStart = match.index;\n const directive = match[1].trim();\n if (['!hide', '!show'].includes(directive)) {\n const isShow = directive === '!show';\n if (spanStart === undefined) {\n // Add a span at the start which is the reverse of the actual first directive\n ret.push({ start: 0, end: directiveStart, visible: !isShow });\n } else {\n // Else add a span for the current directive\n ret.push({ start: spanStart, end: directiveStart, visible });\n }\n visible = isShow;\n\n // A directive eats its trailing newline.\n spanStart = match.index + match[0].length + 1;\n }\n }\n\n // Add the remainder under the last visibility\n ret.push({ start: spanStart ?? 0, end: source.length, visible });\n\n // Filter empty spans and return\n return ret.filter((s) => s.start < s.end);\n}\n\n/**\n * Whether span a is fully inside span b\n */\nexport function spanInside(a: Span, b: Span) {\n return b.start <= a.start && a.end <= b.end;\n}\n\nexport function spanContains(a: Span, position: number) {\n return a.start <= position && position < a.end;\n}\n"]}
|
package/lib/util.d.ts
CHANGED
package/lib/util.js
CHANGED
@@ -1,11 +1,28 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
3
|
+
exports.StrictBrand = void 0;
|
4
|
+
exports.startsWithUppercase = startsWithUppercase;
|
5
|
+
exports.printDiagnostics = printDiagnostics;
|
6
|
+
exports.formatList = formatList;
|
7
|
+
exports.annotateStrictDiagnostic = annotateStrictDiagnostic;
|
8
|
+
exports.hasStrictBranding = hasStrictBranding;
|
9
|
+
exports.divideEvenly = divideEvenly;
|
10
|
+
exports.flat = flat;
|
11
|
+
exports.partition = partition;
|
12
|
+
exports.setExtend = setExtend;
|
13
|
+
exports.mkDict = mkDict;
|
14
|
+
exports.fmap = fmap;
|
15
|
+
exports.mapValues = mapValues;
|
16
|
+
exports.sortBy = sortBy;
|
17
|
+
exports.groupBy = groupBy;
|
18
|
+
exports.isDefined = isDefined;
|
19
|
+
exports.indexBy = indexBy;
|
20
|
+
exports.commentToken = commentToken;
|
21
|
+
exports.pathExists = pathExists;
|
4
22
|
const node_fs_1 = require("node:fs");
|
5
23
|
function startsWithUppercase(x) {
|
6
24
|
return /^[A-Z]/.exec(x) != null;
|
7
25
|
}
|
8
|
-
exports.startsWithUppercase = startsWithUppercase;
|
9
26
|
function printDiagnostics(diags, stream, colors) {
|
10
27
|
// Don't print too much, at some point it just clogs up the log
|
11
28
|
const maxDiags = 50;
|
@@ -16,12 +33,10 @@ function printDiagnostics(diags, stream, colors) {
|
|
16
33
|
stream.write(`(...and ${diags.length - maxDiags} more diagnostics not shown)`);
|
17
34
|
}
|
18
35
|
}
|
19
|
-
exports.printDiagnostics = printDiagnostics;
|
20
36
|
function formatList(xs, n = 5) {
|
21
37
|
const tooMany = xs.length - n;
|
22
38
|
return tooMany > 0 ? `${xs.slice(0, n).join(', ')} (and ${tooMany} more)` : xs.join(', ');
|
23
39
|
}
|
24
|
-
exports.formatList = formatList;
|
25
40
|
exports.StrictBrand = 'jsii.strict';
|
26
41
|
/**
|
27
42
|
* Annotate a diagnostic with a magic property to indicate it's a strict diagnostic
|
@@ -34,14 +49,12 @@ function annotateStrictDiagnostic(diag) {
|
|
34
49
|
writable: false,
|
35
50
|
});
|
36
51
|
}
|
37
|
-
exports.annotateStrictDiagnostic = annotateStrictDiagnostic;
|
38
52
|
/**
|
39
53
|
* Return whether or not the given diagnostic was annotated with the magic strict property
|
40
54
|
*/
|
41
55
|
function hasStrictBranding(diag) {
|
42
56
|
return !!diag[exports.StrictBrand];
|
43
57
|
}
|
44
|
-
exports.hasStrictBranding = hasStrictBranding;
|
45
58
|
/**
|
46
59
|
* Chunk an array of elements into approximately equal groups
|
47
60
|
*/
|
@@ -53,11 +66,9 @@ function divideEvenly(groups, xs) {
|
|
53
66
|
}
|
54
67
|
return ret;
|
55
68
|
}
|
56
|
-
exports.divideEvenly = divideEvenly;
|
57
69
|
function flat(xs) {
|
58
70
|
return Array.prototype.concat.apply([], xs);
|
59
71
|
}
|
60
|
-
exports.flat = flat;
|
61
72
|
/**
|
62
73
|
* Partition a list in twain using a predicate
|
63
74
|
*
|
@@ -76,13 +87,11 @@ function partition(xs, pred) {
|
|
76
87
|
}
|
77
88
|
return [truthy, falsy];
|
78
89
|
}
|
79
|
-
exports.partition = partition;
|
80
90
|
function setExtend(xs, els) {
|
81
91
|
for (const el of els) {
|
82
92
|
xs.add(el);
|
83
93
|
}
|
84
94
|
}
|
85
|
-
exports.setExtend = setExtend;
|
86
95
|
function mkDict(xs) {
|
87
96
|
const ret = {};
|
88
97
|
for (const [key, value] of xs) {
|
@@ -90,14 +99,12 @@ function mkDict(xs) {
|
|
90
99
|
}
|
91
100
|
return ret;
|
92
101
|
}
|
93
|
-
exports.mkDict = mkDict;
|
94
102
|
function fmap(value, fn) {
|
95
103
|
if (value == null) {
|
96
104
|
return undefined;
|
97
105
|
}
|
98
106
|
return fn(value);
|
99
107
|
}
|
100
|
-
exports.fmap = fmap;
|
101
108
|
function mapValues(xs, fn) {
|
102
109
|
const ret = {};
|
103
110
|
for (const [key, value] of Object.entries(xs)) {
|
@@ -105,7 +112,6 @@ function mapValues(xs, fn) {
|
|
105
112
|
}
|
106
113
|
return ret;
|
107
114
|
}
|
108
|
-
exports.mapValues = mapValues;
|
109
115
|
/**
|
110
116
|
* Sort an array by a key function.
|
111
117
|
*
|
@@ -138,7 +144,6 @@ function sortBy(xs, keyFn) {
|
|
138
144
|
return aKey.length - bKey.length;
|
139
145
|
});
|
140
146
|
}
|
141
|
-
exports.sortBy = sortBy;
|
142
147
|
/**
|
143
148
|
* Group elements by a key
|
144
149
|
*
|
@@ -159,15 +164,12 @@ function groupBy(xs, keyFn) {
|
|
159
164
|
}
|
160
165
|
return ret;
|
161
166
|
}
|
162
|
-
exports.groupBy = groupBy;
|
163
167
|
function isDefined(x) {
|
164
168
|
return x !== undefined;
|
165
169
|
}
|
166
|
-
exports.isDefined = isDefined;
|
167
170
|
function indexBy(xs, fn) {
|
168
171
|
return mkDict(xs.map((x) => [fn(x), x]));
|
169
172
|
}
|
170
|
-
exports.indexBy = indexBy;
|
171
173
|
function commentToken(language) {
|
172
174
|
// This is future-proofed a bit, but don't read too much in this...
|
173
175
|
switch (language) {
|
@@ -181,7 +183,6 @@ function commentToken(language) {
|
|
181
183
|
return '//';
|
182
184
|
}
|
183
185
|
}
|
184
|
-
exports.commentToken = commentToken;
|
185
186
|
async function pathExists(path) {
|
186
187
|
try {
|
187
188
|
await node_fs_1.promises.stat(path);
|
@@ -197,7 +198,6 @@ async function pathExists(path) {
|
|
197
198
|
throw err;
|
198
199
|
}
|
199
200
|
}
|
200
|
-
exports.pathExists = pathExists;
|
201
201
|
// Copy/pasted from the 'ansi-regex' package to avoid taking a dependency for this one line that will never change
|
202
202
|
const ANSI_PATTERN = new RegExp([
|
203
203
|
'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
|
package/lib/util.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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","sourcesContent":["import { promises as fs } from 'node:fs';\nimport * as ts from 'typescript';\n\nimport { RosettaDiagnostic } from './translate';\n\nexport function startsWithUppercase(x: string): boolean {\n return /^[A-Z]/.exec(x) != null;\n}\n\nexport interface File {\n readonly contents: string;\n readonly fileName: string;\n}\n\nexport function printDiagnostics(diags: readonly RosettaDiagnostic[], stream: NodeJS.WritableStream, colors: boolean) {\n // Don't print too much, at some point it just clogs up the log\n const maxDiags = 50;\n\n for (const diag of diags.slice(0, maxDiags)) {\n stream.write(colors ? diag.formattedMessage : stripColorCodes(diag.formattedMessage));\n }\n\n if (diags.length > maxDiags) {\n stream.write(`(...and ${diags.length - maxDiags} more diagnostics not shown)`);\n }\n}\n\nexport function formatList(xs: string[], n = 5) {\n const tooMany = xs.length - n;\n\n return tooMany > 0 ? `${xs.slice(0, n).join(', ')} (and ${tooMany} more)` : xs.join(', ');\n}\n\nexport const StrictBrand = 'jsii.strict';\ninterface MaybeStrictDiagnostic {\n readonly [StrictBrand]?: boolean;\n}\n\n/**\n * Annotate a diagnostic with a magic property to indicate it's a strict diagnostic\n */\nexport function annotateStrictDiagnostic(diag: ts.Diagnostic) {\n Object.defineProperty(diag, StrictBrand, {\n configurable: false,\n enumerable: true,\n value: true,\n writable: false,\n });\n}\n\n/**\n * Return whether or not the given diagnostic was annotated with the magic strict property\n */\nexport function hasStrictBranding(diag: ts.Diagnostic) {\n return !!(diag as MaybeStrictDiagnostic)[StrictBrand];\n}\n\n/**\n * Chunk an array of elements into approximately equal groups\n */\nexport function divideEvenly<A>(groups: number, xs: A[]): A[][] {\n const chunkSize = Math.ceil(xs.length / groups);\n const ret: A[][] = [];\n\n for (let i = 0; i < groups; i++) {\n ret.push(xs.slice(i * chunkSize, (i + 1) * chunkSize));\n }\n\n return ret;\n}\n\nexport function flat<A>(xs: A[][]): A[] {\n return Array.prototype.concat.apply([], xs);\n}\n\n/**\n * Partition a list in twain using a predicate\n *\n * Returns [elements-matching-predicate, elements-not-matching-predicate];\n */\nexport function partition<A>(xs: A[], pred: (x: A) => boolean): [A[], A[]] {\n const truthy = new Array<A>();\n const falsy = new Array<A>();\n\n for (const x of xs) {\n if (pred(x)) {\n truthy.push(x);\n } else {\n falsy.push(x);\n }\n }\n\n return [truthy, falsy];\n}\n\nexport function setExtend<A>(xs: Set<A>, els: Iterable<A>) {\n for (const el of els) {\n xs.add(el);\n }\n}\n\nexport function mkDict<A extends string, B>(xs: Array<readonly [A, B]>): Record<A, B> {\n const ret: any = {};\n for (const [key, value] of xs) {\n ret[key] = value;\n }\n return ret;\n}\n\n/**\n * Apply a function to a value, as long as it's not `undefined`\n *\n * This is a companion helper to TypeScript's nice `??` and `?.` nullish\n * operators. Those operators are helpful if you're calling methods:\n *\n * object?.method() <- returns 'undefined' if 'object' is nullish\n *\n * But are no help when you want to use free functions:\n *\n * func(object) <- but what if 'object' is nullish and func\n * expects it not to be?\n *\n * Yes you can write `object ? func(object) : undefined` but the trailing\n * `: undefined` clutters your code. Instead, you write:\n *\n * fmap(object, func)\n *\n * The name `fmap` is taken from Haskell: it's a \"Functor-map\" (although\n * only for the `Maybe` Functor).\n */\nexport function fmap<A, B>(value: NonNullable<A>, fn: (x: NonNullable<A>) => B): B;\nexport function fmap<A, B>(value: undefined | null, fn: (x: NonNullable<A>) => B): undefined;\nexport function fmap<A, B>(value: A | undefined | null, fn: (x: A) => B): B | undefined;\nexport function fmap<A, B>(value: A, fn: (x: A) => B): B | undefined {\n if (value == null) {\n return undefined;\n }\n return fn(value);\n}\n\nexport function mapValues<A, B>(xs: Record<string, A>, fn: (x: A) => B): Record<string, B> {\n const ret: Record<string, B> = {};\n for (const [key, value] of Object.entries(xs)) {\n ret[key] = fn(value);\n }\n return ret;\n}\n\n/**\n * Sort an array by a key function.\n *\n * Instead of having to write your own comparators for your types any time you\n * want to sort, you supply a function that maps a value to a compound sort key\n * consisting of numbers or strings. The sorting will happen by that sort key\n * instead.\n */\nexport function sortBy<A>(xs: A[], keyFn: (x: A) => Array<string | number>) {\n return xs.sort((a, b) => {\n const aKey = keyFn(a);\n const bKey = keyFn(b);\n\n for (let i = 0; i < Math.min(aKey.length, bKey.length); i++) {\n // Compare aKey[i] to bKey[i]\n const av = aKey[i];\n const bv = bKey[i];\n\n if (av === bv) {\n continue;\n }\n\n if (typeof av !== typeof bv) {\n throw new Error(`Type of sort key ${JSON.stringify(aKey)} not same as ${JSON.stringify(bKey)}`);\n }\n\n if (typeof av === 'number' && typeof bv === 'number') {\n return av - bv;\n }\n\n if (typeof av === 'string' && typeof bv === 'string') {\n return av.localeCompare(bv);\n }\n }\n\n return aKey.length - bKey.length;\n });\n}\n\n/**\n * Group elements by a key\n *\n * Supply a function that maps each element to a key string.\n *\n * Returns a map of the key to the list of elements that map to that key.\n */\nexport function groupBy<A>(xs: A[], keyFn: (x: A) => string): Record<string, A[]> {\n const ret: Record<string, A[]> = {};\n for (const x of xs) {\n const key = keyFn(x);\n if (ret[key]) {\n ret[key].push(x);\n } else {\n ret[key] = [x];\n }\n }\n return ret;\n}\n\nexport function isDefined<A>(x: A): x is NonNullable<A> {\n return x !== undefined;\n}\n\nexport function indexBy<A>(xs: A[], fn: (x: A) => string): Record<string, A> {\n return mkDict(xs.map((x) => [fn(x), x] as const));\n}\n\nexport type Mutable<T> = { -readonly [P in keyof T]: Mutable<T[P]> };\n\nexport function commentToken(language: string) {\n // This is future-proofed a bit, but don't read too much in this...\n switch (language) {\n case 'python':\n case 'ruby':\n return '#';\n case 'csharp':\n case 'java':\n case 'go':\n default:\n return '//';\n }\n}\n\nexport async function pathExists(path: string): Promise<boolean> {\n try {\n await fs.stat(path);\n return true;\n } catch (err: any) {\n if (err.code === 'ENOENT') {\n return false;\n }\n if (!err.stack) {\n Error.captureStackTrace(err);\n }\n throw err;\n }\n}\n\n// Copy/pasted from the 'ansi-regex' package to avoid taking a dependency for this one line that will never change\nconst ANSI_PATTERN = new RegExp(\n [\n '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n ].join('|'),\n 'g',\n);\n\nfunction stripColorCodes(x: string) {\n return x.replace(ANSI_PATTERN, '');\n}\n"]}
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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","sourcesContent":["import { promises as fs } from 'node:fs';\nimport * as ts from 'typescript';\n\nimport { RosettaDiagnostic } from './translate';\n\nexport function startsWithUppercase(x: string): boolean {\n return /^[A-Z]/.exec(x) != null;\n}\n\nexport interface File {\n readonly contents: string;\n readonly fileName: string;\n}\n\nexport function printDiagnostics(diags: readonly RosettaDiagnostic[], stream: NodeJS.WritableStream, colors: boolean) {\n // Don't print too much, at some point it just clogs up the log\n const maxDiags = 50;\n\n for (const diag of diags.slice(0, maxDiags)) {\n stream.write(colors ? diag.formattedMessage : stripColorCodes(diag.formattedMessage));\n }\n\n if (diags.length > maxDiags) {\n stream.write(`(...and ${diags.length - maxDiags} more diagnostics not shown)`);\n }\n}\n\nexport function formatList(xs: string[], n = 5) {\n const tooMany = xs.length - n;\n\n return tooMany > 0 ? `${xs.slice(0, n).join(', ')} (and ${tooMany} more)` : xs.join(', ');\n}\n\nexport const StrictBrand = 'jsii.strict';\ninterface MaybeStrictDiagnostic {\n readonly [StrictBrand]?: boolean;\n}\n\n/**\n * Annotate a diagnostic with a magic property to indicate it's a strict diagnostic\n */\nexport function annotateStrictDiagnostic(diag: ts.Diagnostic) {\n Object.defineProperty(diag, StrictBrand, {\n configurable: false,\n enumerable: true,\n value: true,\n writable: false,\n });\n}\n\n/**\n * Return whether or not the given diagnostic was annotated with the magic strict property\n */\nexport function hasStrictBranding(diag: ts.Diagnostic) {\n return !!(diag as MaybeStrictDiagnostic)[StrictBrand];\n}\n\n/**\n * Chunk an array of elements into approximately equal groups\n */\nexport function divideEvenly<A>(groups: number, xs: A[]): A[][] {\n const chunkSize = Math.ceil(xs.length / groups);\n const ret: A[][] = [];\n\n for (let i = 0; i < groups; i++) {\n ret.push(xs.slice(i * chunkSize, (i + 1) * chunkSize));\n }\n\n return ret;\n}\n\nexport function flat<A>(xs: A[][]): A[] {\n return Array.prototype.concat.apply([], xs);\n}\n\n/**\n * Partition a list in twain using a predicate\n *\n * Returns [elements-matching-predicate, elements-not-matching-predicate];\n */\nexport function partition<A>(xs: A[], pred: (x: A) => boolean): [A[], A[]] {\n const truthy = new Array<A>();\n const falsy = new Array<A>();\n\n for (const x of xs) {\n if (pred(x)) {\n truthy.push(x);\n } else {\n falsy.push(x);\n }\n }\n\n return [truthy, falsy];\n}\n\nexport function setExtend<A>(xs: Set<A>, els: Iterable<A>) {\n for (const el of els) {\n xs.add(el);\n }\n}\n\nexport function mkDict<A extends string, B>(xs: Array<readonly [A, B]>): Record<A, B> {\n const ret: any = {};\n for (const [key, value] of xs) {\n ret[key] = value;\n }\n return ret;\n}\n\n/**\n * Apply a function to a value, as long as it's not `undefined`\n *\n * This is a companion helper to TypeScript's nice `??` and `?.` nullish\n * operators. Those operators are helpful if you're calling methods:\n *\n * object?.method() <- returns 'undefined' if 'object' is nullish\n *\n * But are no help when you want to use free functions:\n *\n * func(object) <- but what if 'object' is nullish and func\n * expects it not to be?\n *\n * Yes you can write `object ? func(object) : undefined` but the trailing\n * `: undefined` clutters your code. Instead, you write:\n *\n * fmap(object, func)\n *\n * The name `fmap` is taken from Haskell: it's a \"Functor-map\" (although\n * only for the `Maybe` Functor).\n */\nexport function fmap<A, B>(value: NonNullable<A>, fn: (x: NonNullable<A>) => B): B;\nexport function fmap<A, B>(value: undefined | null, fn: (x: NonNullable<A>) => B): undefined;\nexport function fmap<A, B>(value: A | undefined | null, fn: (x: A) => B): B | undefined;\nexport function fmap<A, B>(value: A, fn: (x: A) => B): B | undefined {\n if (value == null) {\n return undefined;\n }\n return fn(value);\n}\n\nexport function mapValues<A, B>(xs: Record<string, A>, fn: (x: A) => B): Record<string, B> {\n const ret: Record<string, B> = {};\n for (const [key, value] of Object.entries(xs)) {\n ret[key] = fn(value);\n }\n return ret;\n}\n\n/**\n * Sort an array by a key function.\n *\n * Instead of having to write your own comparators for your types any time you\n * want to sort, you supply a function that maps a value to a compound sort key\n * consisting of numbers or strings. The sorting will happen by that sort key\n * instead.\n */\nexport function sortBy<A>(xs: A[], keyFn: (x: A) => Array<string | number>) {\n return xs.sort((a, b) => {\n const aKey = keyFn(a);\n const bKey = keyFn(b);\n\n for (let i = 0; i < Math.min(aKey.length, bKey.length); i++) {\n // Compare aKey[i] to bKey[i]\n const av = aKey[i];\n const bv = bKey[i];\n\n if (av === bv) {\n continue;\n }\n\n if (typeof av !== typeof bv) {\n throw new Error(`Type of sort key ${JSON.stringify(aKey)} not same as ${JSON.stringify(bKey)}`);\n }\n\n if (typeof av === 'number' && typeof bv === 'number') {\n return av - bv;\n }\n\n if (typeof av === 'string' && typeof bv === 'string') {\n return av.localeCompare(bv);\n }\n }\n\n return aKey.length - bKey.length;\n });\n}\n\n/**\n * Group elements by a key\n *\n * Supply a function that maps each element to a key string.\n *\n * Returns a map of the key to the list of elements that map to that key.\n */\nexport function groupBy<A>(xs: A[], keyFn: (x: A) => string): Record<string, A[]> {\n const ret: Record<string, A[]> = {};\n for (const x of xs) {\n const key = keyFn(x);\n if (ret[key]) {\n ret[key].push(x);\n } else {\n ret[key] = [x];\n }\n }\n return ret;\n}\n\nexport function isDefined<A>(x: A): x is NonNullable<A> {\n return x !== undefined;\n}\n\nexport function indexBy<A>(xs: A[], fn: (x: A) => string): Record<string, A> {\n return mkDict(xs.map((x) => [fn(x), x] as const));\n}\n\nexport type Mutable<T> = { -readonly [P in keyof T]: Mutable<T[P]> };\n\nexport function commentToken(language: string) {\n // This is future-proofed a bit, but don't read too much in this...\n switch (language) {\n case 'python':\n case 'ruby':\n return '#';\n case 'csharp':\n case 'java':\n case 'go':\n default:\n return '//';\n }\n}\n\nexport async function pathExists(path: string): Promise<boolean> {\n try {\n await fs.stat(path);\n return true;\n } catch (err: any) {\n if (err.code === 'ENOENT') {\n return false;\n }\n if (!err.stack) {\n Error.captureStackTrace(err);\n }\n throw err;\n }\n}\n\n// Copy/pasted from the 'ansi-regex' package to avoid taking a dependency for this one line that will never change\nconst ANSI_PATTERN = new RegExp(\n [\n '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n ].join('|'),\n 'g',\n);\n\nfunction stripColorCodes(x: string) {\n return x.replace(ANSI_PATTERN, '');\n}\n"]}
|
package/package.json
CHANGED
@@ -71,11 +71,11 @@
|
|
71
71
|
"chalk": "^4",
|
72
72
|
"commonmark": "^0.31.1",
|
73
73
|
"fast-glob": "^3.3.2",
|
74
|
-
"jsii": "~5.
|
74
|
+
"jsii": "~5.5.0",
|
75
75
|
"semver": "^7.6.3",
|
76
76
|
"semver-intersect": "^1.5.0",
|
77
77
|
"stream-json": "^1.8.0",
|
78
|
-
"typescript": "~5.
|
78
|
+
"typescript": "~5.5",
|
79
79
|
"workerpool": "^6.5.1",
|
80
80
|
"yargs": "^17.7.2"
|
81
81
|
},
|
@@ -88,7 +88,7 @@
|
|
88
88
|
"publishConfig": {
|
89
89
|
"access": "public"
|
90
90
|
},
|
91
|
-
"version": "5.
|
91
|
+
"version": "5.5.1-dev.0",
|
92
92
|
"types": "lib/index.d.ts",
|
93
93
|
"exports": {
|
94
94
|
".": "./lib/index.js",
|
package/releases.json
CHANGED