@openpkg-ts/sdk 0.47.1 → 0.48.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/dist/index.d.ts CHANGED
@@ -156,6 +156,16 @@ interface ExportVerification {
156
156
  interface OpenpkgConfig {
157
157
  /** Configuration for resolving external package re-exports */
158
158
  externals?: ExternalsConfig;
159
+ /**
160
+ * Expand referenced types from third-party packages instead of recording
161
+ * them as opaque stubs. `true` follows every dependency; a string[] follows
162
+ * only the named packages (by declaring package name). Default: stub.
163
+ */
164
+ followExternal?: boolean | string[];
165
+ /** Only extract these exports (supports * wildcards). */
166
+ only?: string[];
167
+ /** Ignore these exports (supports * wildcards). */
168
+ ignore?: string[];
159
169
  }
160
170
  /** Default config filename */
161
171
  declare const CONFIG_FILENAME = "openpkg.config.json";
package/dist/index.js CHANGED
@@ -79,7 +79,12 @@ function mergeConfig(fileConfig, cliOptions) {
79
79
  depth: cliOptions.externals?.depth ?? fileConfig.externals?.depth
80
80
  };
81
81
  const hasExternals = externals.include || externals.exclude || externals.depth !== undefined;
82
- return hasExternals ? { externals } : {};
82
+ return {
83
+ ...hasExternals ? { externals } : {},
84
+ followExternal: cliOptions.followExternal ?? fileConfig.followExternal,
85
+ only: cliOptions.only ?? fileConfig.only,
86
+ ignore: cliOptions.ignore ?? fileConfig.ignore
87
+ };
83
88
  }
84
89
  // src/core/loader.ts
85
90
  import * as fs2 from "node:fs";
@@ -3090,12 +3095,18 @@ class TypeRegistry {
3090
3095
  if (this.has(name))
3091
3096
  return name;
3092
3097
  if (ctx.shouldExpandExternal && !ctx.shouldExpandExternal(symbol)) {
3098
+ const origin = getTypeOrigin(type, ctx.typeChecker);
3099
+ const schema = {
3100
+ "x-ts-type": renderTypeText(type, ctx.typeChecker)
3101
+ };
3102
+ if (origin)
3103
+ schema["x-ts-package"] = origin;
3093
3104
  this.add({
3094
3105
  id: name,
3095
3106
  name,
3096
3107
  kind: "external",
3097
3108
  external: true,
3098
- schema: { "x-ts-type": renderTypeText(type, ctx.typeChecker) }
3109
+ schema
3099
3110
  });
3100
3111
  return name;
3101
3112
  }
@@ -3213,6 +3224,11 @@ class TypeRegistry {
3213
3224
  if (type.flags & ts5.TypeFlags.Conditional) {
3214
3225
  return { "x-ts-type": renderTypeText(type, checker) };
3215
3226
  }
3227
+ const constraint = checker.getBaseConstraintOfType(type);
3228
+ const primitive = constraint && constraint.flags & ts5.TypeFlags.StringLike ? "string" : constraint && constraint.flags & ts5.TypeFlags.NumberLike ? "number" : constraint && constraint.flags & ts5.TypeFlags.BooleanLike ? "boolean" : undefined;
3229
+ if (primitive) {
3230
+ return { type: primitive, "x-ts-type": renderTypeText(type, checker) };
3231
+ }
3216
3232
  return this.buildObjectSchemaFromProperties(type, checker, ctx);
3217
3233
  }
3218
3234
  buildEnumSchema(symbol, checker) {
@@ -6218,12 +6234,18 @@ function isLibFile(fileName) {
6218
6234
  return fileName.includes("/typescript/lib/lib.") || fileName.includes("\\typescript\\lib\\lib.");
6219
6235
  }
6220
6236
  function createExternalExpansionPredicate(opts) {
6237
+ const matchesEntry = (entry, pkg) => {
6238
+ if (!entry.includes("*"))
6239
+ return entry === pkg;
6240
+ const rx = new RegExp(`^${entry.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*")}$`);
6241
+ return rx.test(pkg);
6242
+ };
6221
6243
  const packageAllowed = (pkg) => {
6222
6244
  if (pkg === "typescript")
6223
6245
  return false;
6224
6246
  if (opts.followExternal === true)
6225
6247
  return true;
6226
- if (Array.isArray(opts.followExternal) && opts.followExternal.includes(pkg))
6248
+ if (Array.isArray(opts.followExternal) && opts.followExternal.some((e) => matchesEntry(e, pkg)))
6227
6249
  return true;
6228
6250
  return opts.workspacePackages.has(pkg);
6229
6251
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openpkg-ts/sdk",
3
- "version": "0.47.1",
3
+ "version": "0.48.0",
4
4
  "description": "TypeScript API extraction SDK - programmatic primitives for OpenPkg specs",
5
5
  "keywords": [
6
6
  "openpkg",