@microwiseai/snapshot 0.3.6 → 0.3.26
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/commands/install.d.ts +13 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +517 -49
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/license.d.ts +21 -0
- package/dist/commands/license.d.ts.map +1 -0
- package/dist/commands/license.js +120 -0
- package/dist/commands/license.js.map +1 -0
- package/dist/index.js +46 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +32 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +89 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/gitlab.d.ts +26 -20
- package/dist/lib/gitlab.d.ts.map +1 -1
- package/dist/lib/gitlab.js +100 -153
- package/dist/lib/gitlab.js.map +1 -1
- package/dist/lib/package-resolver.d.ts +48 -0
- package/dist/lib/package-resolver.d.ts.map +1 -0
- package/dist/lib/package-resolver.js +178 -0
- package/dist/lib/package-resolver.js.map +1 -0
- package/dist/lib/skit-adapter.d.ts +56 -0
- package/dist/lib/skit-adapter.d.ts.map +1 -0
- package/dist/lib/skit-adapter.js +166 -0
- package/dist/lib/skit-adapter.js.map +1 -0
- package/dist/lib/transitive-resolver.d.ts +86 -0
- package/dist/lib/transitive-resolver.d.ts.map +1 -0
- package/dist/lib/transitive-resolver.js +431 -0
- package/dist/lib/transitive-resolver.js.map +1 -0
- package/dist/lib/types.d.ts +6 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib.d.ts +59 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +134 -0
- package/dist/lib.js.map +1 -0
- package/dist/tools/snapshot-to-license.d.ts +13 -0
- package/dist/tools/snapshot-to-license.d.ts.map +1 -0
- package/dist/tools/snapshot-to-license.js +105 -0
- package/dist/tools/snapshot-to-license.js.map +1 -0
- package/node_modules/@microwiseai/cache/README.md +143 -0
- package/node_modules/@microwiseai/cache/dist/file.d.ts +97 -0
- package/node_modules/@microwiseai/cache/dist/file.d.ts.map +1 -0
- package/node_modules/@microwiseai/cache/dist/file.js +256 -0
- package/node_modules/@microwiseai/cache/dist/file.js.map +1 -0
- package/node_modules/@microwiseai/cache/dist/index.d.ts +10 -0
- package/node_modules/@microwiseai/cache/dist/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/cache/dist/index.js +11 -0
- package/node_modules/@microwiseai/cache/dist/index.js.map +1 -0
- package/node_modules/@microwiseai/cache/dist/memory.d.ts +69 -0
- package/node_modules/@microwiseai/cache/dist/memory.d.ts.map +1 -0
- package/node_modules/@microwiseai/cache/dist/memory.js +152 -0
- package/node_modules/@microwiseai/cache/dist/memory.js.map +1 -0
- package/node_modules/@microwiseai/cache/dist/types.d.ts +76 -0
- package/node_modules/@microwiseai/cache/dist/types.d.ts.map +1 -0
- package/node_modules/@microwiseai/cache/dist/types.js +5 -0
- package/node_modules/@microwiseai/cache/dist/types.js.map +1 -0
- package/node_modules/@microwiseai/cache/package.json +40 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/detector.test.d.ts +7 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/detector.test.d.ts.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/detector.test.js +139 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/detector.test.js.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/reporter.test.d.ts +8 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/reporter.test.d.ts.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/reporter.test.js +195 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/reporter.test.js.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/types.test.d.ts +8 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/types.test.d.ts.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/types.test.js +97 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/types.test.js.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/detector.d.ts +16 -0
- package/node_modules/@microwiseai/import-telemetry/dist/detector.d.ts.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/detector.js +103 -0
- package/node_modules/@microwiseai/import-telemetry/dist/detector.js.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/index.d.ts +48 -0
- package/node_modules/@microwiseai/import-telemetry/dist/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/index.js +56 -0
- package/node_modules/@microwiseai/import-telemetry/dist/index.js.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/reporter.d.ts +16 -0
- package/node_modules/@microwiseai/import-telemetry/dist/reporter.d.ts.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/reporter.js +147 -0
- package/node_modules/@microwiseai/import-telemetry/dist/reporter.js.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/types.d.ts +75 -0
- package/node_modules/@microwiseai/import-telemetry/dist/types.d.ts.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/types.js +23 -0
- package/node_modules/@microwiseai/import-telemetry/dist/types.js.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/package.json +40 -0
- package/node_modules/@microwiseai/license/README.md +157 -0
- package/node_modules/@microwiseai/license/dist/api/client.d.ts +37 -0
- package/node_modules/@microwiseai/license/dist/api/client.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/api/client.js +95 -0
- package/node_modules/@microwiseai/license/dist/api/client.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/api/endpoints.d.ts +25 -0
- package/node_modules/@microwiseai/license/dist/api/endpoints.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/api/endpoints.js +101 -0
- package/node_modules/@microwiseai/license/dist/api/endpoints.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/api/index.d.ts +7 -0
- package/node_modules/@microwiseai/license/dist/api/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/api/index.js +8 -0
- package/node_modules/@microwiseai/license/dist/api/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/file.d.ts +38 -0
- package/node_modules/@microwiseai/license/dist/cache/file.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/file.js +140 -0
- package/node_modules/@microwiseai/license/dist/cache/file.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/index.d.ts +7 -0
- package/node_modules/@microwiseai/license/dist/cache/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/index.js +10 -0
- package/node_modules/@microwiseai/license/dist/cache/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/memory.d.ts +35 -0
- package/node_modules/@microwiseai/license/dist/cache/memory.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/memory.js +77 -0
- package/node_modules/@microwiseai/license/dist/cache/memory.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/offline.d.ts +29 -0
- package/node_modules/@microwiseai/license/dist/cache/offline.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/offline.js +58 -0
- package/node_modules/@microwiseai/license/dist/cache/offline.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/client.d.ts +42 -0
- package/node_modules/@microwiseai/license/dist/client.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/client.js +83 -0
- package/node_modules/@microwiseai/license/dist/client.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/config.d.ts +27 -0
- package/node_modules/@microwiseai/license/dist/config.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/config.js +52 -0
- package/node_modules/@microwiseai/license/dist/config.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/activate.d.ts +21 -0
- package/node_modules/@microwiseai/license/dist/core/activate.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/activate.js +72 -0
- package/node_modules/@microwiseai/license/dist/core/activate.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/check.d.ts +19 -0
- package/node_modules/@microwiseai/license/dist/core/check.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/check.js +244 -0
- package/node_modules/@microwiseai/license/dist/core/check.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/index.d.ts +7 -0
- package/node_modules/@microwiseai/license/dist/core/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/index.js +10 -0
- package/node_modules/@microwiseai/license/dist/core/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/verify.d.ts +39 -0
- package/node_modules/@microwiseai/license/dist/core/verify.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/verify.js +188 -0
- package/node_modules/@microwiseai/license/dist/core/verify.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/env.d.ts +33 -0
- package/node_modules/@microwiseai/license/dist/env.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/env.js +69 -0
- package/node_modules/@microwiseai/license/dist/env.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/helpers/cache.d.ts +97 -0
- package/node_modules/@microwiseai/license/dist/helpers/cache.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/helpers/cache.js +198 -0
- package/node_modules/@microwiseai/license/dist/helpers/cache.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/helpers/index.d.ts +7 -0
- package/node_modules/@microwiseai/license/dist/helpers/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/helpers/index.js +9 -0
- package/node_modules/@microwiseai/license/dist/helpers/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/helpers/telemetry.d.ts +68 -0
- package/node_modules/@microwiseai/license/dist/helpers/telemetry.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/helpers/telemetry.js +119 -0
- package/node_modules/@microwiseai/license/dist/helpers/telemetry.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/index.d.ts +34 -0
- package/node_modules/@microwiseai/license/dist/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/index.js +48 -0
- package/node_modules/@microwiseai/license/dist/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/machine/id.d.ts +19 -0
- package/node_modules/@microwiseai/license/dist/machine/id.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/machine/id.js +83 -0
- package/node_modules/@microwiseai/license/dist/machine/id.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/machine/index.d.ts +6 -0
- package/node_modules/@microwiseai/license/dist/machine/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/machine/index.js +6 -0
- package/node_modules/@microwiseai/license/dist/machine/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/machine/instance.d.ts +23 -0
- package/node_modules/@microwiseai/license/dist/machine/instance.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/machine/instance.js +52 -0
- package/node_modules/@microwiseai/license/dist/machine/instance.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/telemetry/index.d.ts +6 -0
- package/node_modules/@microwiseai/license/dist/telemetry/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/telemetry/index.js +6 -0
- package/node_modules/@microwiseai/license/dist/telemetry/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/telemetry/manager.d.ts +53 -0
- package/node_modules/@microwiseai/license/dist/telemetry/manager.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/telemetry/manager.js +125 -0
- package/node_modules/@microwiseai/license/dist/telemetry/manager.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/telemetry/payload.d.ts +17 -0
- package/node_modules/@microwiseai/license/dist/telemetry/payload.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/telemetry/payload.js +65 -0
- package/node_modules/@microwiseai/license/dist/telemetry/payload.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/api.d.ts +120 -0
- package/node_modules/@microwiseai/license/dist/types/api.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/api.js +5 -0
- package/node_modules/@microwiseai/license/dist/types/api.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/config.d.ts +80 -0
- package/node_modules/@microwiseai/license/dist/types/config.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/config.js +12 -0
- package/node_modules/@microwiseai/license/dist/types/config.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/errors.d.ts +93 -0
- package/node_modules/@microwiseai/license/dist/types/errors.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/errors.js +144 -0
- package/node_modules/@microwiseai/license/dist/types/errors.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/index.d.ts +10 -0
- package/node_modules/@microwiseai/license/dist/types/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/index.js +6 -0
- package/node_modules/@microwiseai/license/dist/types/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/license.d.ts +113 -0
- package/node_modules/@microwiseai/license/dist/types/license.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/license.js +5 -0
- package/node_modules/@microwiseai/license/dist/types/license.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/date.d.ts +45 -0
- package/node_modules/@microwiseai/license/dist/utils/date.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/date.js +95 -0
- package/node_modules/@microwiseai/license/dist/utils/date.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/env.d.ts +41 -0
- package/node_modules/@microwiseai/license/dist/utils/env.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/env.js +80 -0
- package/node_modules/@microwiseai/license/dist/utils/env.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/index.d.ts +7 -0
- package/node_modules/@microwiseai/license/dist/utils/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/index.js +7 -0
- package/node_modules/@microwiseai/license/dist/utils/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/mask.d.ts +27 -0
- package/node_modules/@microwiseai/license/dist/utils/mask.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/mask.js +67 -0
- package/node_modules/@microwiseai/license/dist/utils/mask.js.map +1 -0
- package/node_modules/@microwiseai/license/package.json +52 -0
- package/node_modules/@microwiseai/license-types/README.md +84 -0
- package/node_modules/@microwiseai/license-types/dist/api.d.ts +120 -0
- package/node_modules/@microwiseai/license-types/dist/api.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/api.js +5 -0
- package/node_modules/@microwiseai/license-types/dist/api.js.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/config.d.ts +80 -0
- package/node_modules/@microwiseai/license-types/dist/config.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/config.js +12 -0
- package/node_modules/@microwiseai/license-types/dist/config.js.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/errors.d.ts +93 -0
- package/node_modules/@microwiseai/license-types/dist/errors.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/errors.js +144 -0
- package/node_modules/@microwiseai/license-types/dist/errors.js.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/index.d.ts +10 -0
- package/node_modules/@microwiseai/license-types/dist/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/index.js +6 -0
- package/node_modules/@microwiseai/license-types/dist/index.js.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/license.d.ts +113 -0
- package/node_modules/@microwiseai/license-types/dist/license.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/license.js +5 -0
- package/node_modules/@microwiseai/license-types/dist/license.js.map +1 -0
- package/node_modules/@microwiseai/license-types/package.json +38 -0
- package/node_modules/@microwiseai/license-utils/README.md +82 -0
- package/node_modules/@microwiseai/license-utils/dist/__tests__/machine.test.d.ts +2 -0
- package/node_modules/@microwiseai/license-utils/dist/__tests__/machine.test.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/__tests__/machine.test.js +124 -0
- package/node_modules/@microwiseai/license-utils/dist/__tests__/machine.test.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/index.d.ts +7 -0
- package/node_modules/@microwiseai/license-utils/dist/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/index.js +15 -0
- package/node_modules/@microwiseai/license-utils/dist/index.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/id.d.ts +19 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/id.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/id.js +83 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/id.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/index.d.ts +6 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/index.js +6 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/index.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/instance.d.ts +23 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/instance.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/instance.js +52 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/instance.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/date.d.ts +45 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/date.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/date.js +95 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/date.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/env.d.ts +16 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/env.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/env.js +22 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/env.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/index.d.ts +7 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/index.js +7 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/index.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/mask.d.ts +27 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/mask.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/mask.js +67 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/mask.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/package.json +45 -0
- package/node_modules/@microwiseai/telemetry/README.md +86 -0
- package/node_modules/@microwiseai/telemetry/dist/index.d.ts +9 -0
- package/node_modules/@microwiseai/telemetry/dist/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/telemetry/dist/index.js +10 -0
- package/node_modules/@microwiseai/telemetry/dist/index.js.map +1 -0
- package/node_modules/@microwiseai/telemetry/dist/manager.d.ts +71 -0
- package/node_modules/@microwiseai/telemetry/dist/manager.d.ts.map +1 -0
- package/node_modules/@microwiseai/telemetry/dist/manager.js +171 -0
- package/node_modules/@microwiseai/telemetry/dist/manager.js.map +1 -0
- package/node_modules/@microwiseai/telemetry/dist/payload.d.ts +13 -0
- package/node_modules/@microwiseai/telemetry/dist/payload.d.ts.map +1 -0
- package/node_modules/@microwiseai/telemetry/dist/payload.js +35 -0
- package/node_modules/@microwiseai/telemetry/dist/payload.js.map +1 -0
- package/node_modules/@microwiseai/telemetry/dist/types.d.ts +76 -0
- package/node_modules/@microwiseai/telemetry/dist/types.d.ts.map +1 -0
- package/node_modules/@microwiseai/telemetry/dist/types.js +13 -0
- package/node_modules/@microwiseai/telemetry/dist/types.js.map +1 -0
- package/node_modules/@microwiseai/telemetry/package.json +43 -0
- package/node_modules/chalk/license +9 -0
- package/node_modules/chalk/package.json +83 -0
- package/node_modules/chalk/readme.md +297 -0
- package/node_modules/chalk/source/index.d.ts +325 -0
- package/node_modules/chalk/source/index.js +225 -0
- package/node_modules/chalk/source/utilities.js +33 -0
- package/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +236 -0
- package/node_modules/chalk/source/vendor/ansi-styles/index.js +223 -0
- package/node_modules/chalk/source/vendor/supports-color/browser.d.ts +1 -0
- package/node_modules/chalk/source/vendor/supports-color/browser.js +34 -0
- package/node_modules/chalk/source/vendor/supports-color/index.d.ts +55 -0
- package/node_modules/chalk/source/vendor/supports-color/index.js +190 -0
- package/package.json +26 -2
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skit Adapter
|
|
3
|
+
*
|
|
4
|
+
* @ist/skit lib 연동을 위한 어댑터
|
|
5
|
+
* - lib가 있으면 직접 호출 (v0.1.8+)
|
|
6
|
+
* - lib가 없으면 CLI fallback
|
|
7
|
+
*
|
|
8
|
+
* @ist/skit lib 인터페이스 (v0.1.8):
|
|
9
|
+
* - installSkit(spec: string, options?: { sessionToken?, onProgress? })
|
|
10
|
+
* - listSkits(options?: { ... })
|
|
11
|
+
*/
|
|
12
|
+
import { execSync } from 'child_process';
|
|
13
|
+
import { getSessionToken } from './config.js';
|
|
14
|
+
// ============================================================
|
|
15
|
+
// Lib Loader
|
|
16
|
+
// ============================================================
|
|
17
|
+
let skitLib = null;
|
|
18
|
+
let libLoadAttempted = false;
|
|
19
|
+
/**
|
|
20
|
+
* Try to load @ist/skit lib
|
|
21
|
+
* Returns null if not available (will use CLI fallback)
|
|
22
|
+
*/
|
|
23
|
+
async function loadSkitLib() {
|
|
24
|
+
if (libLoadAttempted) {
|
|
25
|
+
return skitLib;
|
|
26
|
+
}
|
|
27
|
+
libLoadAttempted = true;
|
|
28
|
+
try {
|
|
29
|
+
// Dynamic import from @ist/skit/lib (v0.1.8+)
|
|
30
|
+
// @ts-expect-error - @ist/skit/lib may not be available
|
|
31
|
+
const skit = await import('@ist/skit/lib');
|
|
32
|
+
// Check if lib exports exist
|
|
33
|
+
if (typeof skit.installSkit === 'function') {
|
|
34
|
+
skitLib = {
|
|
35
|
+
installSkit: skit.installSkit,
|
|
36
|
+
listSkits: skit.listSkits,
|
|
37
|
+
};
|
|
38
|
+
return skitLib;
|
|
39
|
+
}
|
|
40
|
+
// Lib exists but no installSkit export
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// @ist/skit/lib not installed or doesn't have lib exports
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Reset lib loader (for testing)
|
|
50
|
+
*/
|
|
51
|
+
export function resetSkitLibLoader() {
|
|
52
|
+
skitLib = null;
|
|
53
|
+
libLoadAttempted = false;
|
|
54
|
+
}
|
|
55
|
+
// ============================================================
|
|
56
|
+
// CLI Fallback
|
|
57
|
+
// ============================================================
|
|
58
|
+
function runSkitCli(command) {
|
|
59
|
+
try {
|
|
60
|
+
const output = execSync(command, { stdio: 'pipe', encoding: 'utf-8' });
|
|
61
|
+
return { success: true, output };
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
65
|
+
return { success: false, error };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function installSkitViaCli(spec, options) {
|
|
69
|
+
// Parse spec: "@ist/tda-kit@1.0.0" -> name: "@ist/tda-kit", version: "1.0.0"
|
|
70
|
+
const atIndex = spec.lastIndexOf('@');
|
|
71
|
+
let name;
|
|
72
|
+
let version;
|
|
73
|
+
if (atIndex > 0) {
|
|
74
|
+
name = spec.substring(0, atIndex);
|
|
75
|
+
version = spec.substring(atIndex + 1);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
name = spec;
|
|
79
|
+
version = 'latest';
|
|
80
|
+
}
|
|
81
|
+
const command = `skit install ${spec}`;
|
|
82
|
+
if (!options?.silent) {
|
|
83
|
+
options?.onProgress?.(`[skit-cli] ${command}`);
|
|
84
|
+
}
|
|
85
|
+
const result = runSkitCli(command);
|
|
86
|
+
return {
|
|
87
|
+
success: result.success,
|
|
88
|
+
name,
|
|
89
|
+
version,
|
|
90
|
+
error: result.success ? undefined : result.error || `CLI command failed: ${command}`,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
// ============================================================
|
|
94
|
+
// Public API
|
|
95
|
+
// ============================================================
|
|
96
|
+
/**
|
|
97
|
+
* Install a skit package
|
|
98
|
+
* Uses @ist/skit lib if available, falls back to CLI
|
|
99
|
+
*
|
|
100
|
+
* @param name - Package name (e.g., "@ist/tda-kit")
|
|
101
|
+
* @param version - Version (e.g., "1.0.0")
|
|
102
|
+
* @param options - Install options
|
|
103
|
+
*/
|
|
104
|
+
export async function installSkitPackage(name, version, options) {
|
|
105
|
+
const spec = version ? `${name}@${version}` : name;
|
|
106
|
+
// Try lib first
|
|
107
|
+
const lib = await loadSkitLib();
|
|
108
|
+
if (lib) {
|
|
109
|
+
try {
|
|
110
|
+
// Get session token from options or config
|
|
111
|
+
const sessionToken = options?.sessionToken || getSessionToken() || undefined;
|
|
112
|
+
const libResult = await lib.installSkit(spec, {
|
|
113
|
+
sessionToken,
|
|
114
|
+
onProgress: options?.silent ? undefined : options?.onProgress,
|
|
115
|
+
});
|
|
116
|
+
return {
|
|
117
|
+
success: libResult.success,
|
|
118
|
+
name: libResult.name || name,
|
|
119
|
+
version: libResult.version || version,
|
|
120
|
+
installedPath: libResult.path,
|
|
121
|
+
error: libResult.error,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
// Lib call failed, fall through to CLI
|
|
126
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
127
|
+
if (!options?.silent) {
|
|
128
|
+
console.warn(`[skit-adapter] Lib call failed, using CLI fallback: ${errMsg}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// CLI fallback
|
|
133
|
+
return installSkitViaCli(spec, options);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Check if skit lib is available
|
|
137
|
+
*/
|
|
138
|
+
export async function isSkitLibAvailable() {
|
|
139
|
+
const lib = await loadSkitLib();
|
|
140
|
+
return lib !== null;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Check if skit CLI is available
|
|
144
|
+
*/
|
|
145
|
+
export function isSkitCliAvailable() {
|
|
146
|
+
try {
|
|
147
|
+
execSync('skit --version', { stdio: 'pipe' });
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Get skit availability info
|
|
156
|
+
*/
|
|
157
|
+
export async function getSkitAvailability() {
|
|
158
|
+
const lib = await isSkitLibAvailable();
|
|
159
|
+
const cli = isSkitCliAvailable();
|
|
160
|
+
return {
|
|
161
|
+
lib,
|
|
162
|
+
cli,
|
|
163
|
+
preferred: lib ? 'lib' : cli ? 'cli' : 'none',
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=skit-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skit-adapter.js","sourceRoot":"","sources":["../../src/lib/skit-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transitive Dependency Resolver
|
|
3
|
+
*
|
|
4
|
+
* snapshot과 skit을 재귀적으로 탐색하여 모든 npm 패키지를 수집하고
|
|
5
|
+
* registry-proxy의 /resolve-deps API를 통해 transitive deps를 해석
|
|
6
|
+
*/
|
|
7
|
+
export interface SkitManifest {
|
|
8
|
+
name: string;
|
|
9
|
+
version: string;
|
|
10
|
+
dependencies?: {
|
|
11
|
+
npm?: Record<string, string>;
|
|
12
|
+
skit?: Record<string, string>;
|
|
13
|
+
cli?: Array<{
|
|
14
|
+
name: string;
|
|
15
|
+
install: string;
|
|
16
|
+
}>;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export interface ResolvedPackage {
|
|
20
|
+
name: string;
|
|
21
|
+
version: string;
|
|
22
|
+
isDirect: boolean;
|
|
23
|
+
source: 'snapshot' | 'skit' | 'transitive';
|
|
24
|
+
requestedBy?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface TransitiveResolutionResult {
|
|
27
|
+
/** 수집된 모든 npm 패키지 (직접 + transitive) */
|
|
28
|
+
npm: ResolvedPackage[];
|
|
29
|
+
/** 수집된 모든 skit 패키지 */
|
|
30
|
+
skit: ResolvedPackage[];
|
|
31
|
+
/** 에러 발생한 패키지들 */
|
|
32
|
+
errors: Array<{
|
|
33
|
+
name: string;
|
|
34
|
+
error: string;
|
|
35
|
+
}>;
|
|
36
|
+
/** scope → groupId 매핑 (snapshot registry에서 수집) */
|
|
37
|
+
scopeGroups: Record<string, string>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* license-api /resolve-deps 응답 타입 (normalized)
|
|
41
|
+
*/
|
|
42
|
+
export interface LicenseApiResolveDepsResponse {
|
|
43
|
+
dependencies: Record<string, string>;
|
|
44
|
+
peerDependencies?: Record<string, string>;
|
|
45
|
+
}
|
|
46
|
+
export interface ResolveOptions {
|
|
47
|
+
/** proxy를 통해 transitive deps 해석 */
|
|
48
|
+
resolveTransitive?: boolean;
|
|
49
|
+
/** transitive 해석 대상 스코프 */
|
|
50
|
+
scopes?: string[];
|
|
51
|
+
/** GitLab group ID */
|
|
52
|
+
groupId?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Snapshot의 모든 의존성을 재귀적으로 탐색하고
|
|
56
|
+
* npm transitive deps까지 해석
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolveAllDependencies(snapshotName: string, options?: ResolveOptions): Promise<TransitiveResolutionResult>;
|
|
59
|
+
export interface ResolveDepsFromLicenseOptions {
|
|
60
|
+
/** Package list to resolve (e.g., ['@microwiseai/foo@1.0.0']) */
|
|
61
|
+
packages: string[];
|
|
62
|
+
/** GitLab group ID (string) */
|
|
63
|
+
groupId: string;
|
|
64
|
+
/** Package scopes (e.g., ['@microwiseai']) */
|
|
65
|
+
scopes: string[];
|
|
66
|
+
/** Include peer dependencies in response (default: true) */
|
|
67
|
+
includePeer?: boolean;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* license-api의 /resolve-deps API를 호출하여 의존성 해석
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* const result = await resolveDepsFromLicenseAPI({
|
|
74
|
+
* groupId: 12345,
|
|
75
|
+
* scopes: ['@ist', '@microwiseai'],
|
|
76
|
+
* includePeer: true,
|
|
77
|
+
* });
|
|
78
|
+
* // result.dependencies: { "@ist/tda-kit": "^1.0.0" }
|
|
79
|
+
* // result.peerDependencies: { "typescript": "^5.0.0" }
|
|
80
|
+
*/
|
|
81
|
+
export declare function resolveDepsFromLicenseAPI(options: ResolveDepsFromLicenseOptions): Promise<LicenseApiResolveDepsResponse>;
|
|
82
|
+
/**
|
|
83
|
+
* 캐시 클리어
|
|
84
|
+
*/
|
|
85
|
+
export declare function clearTransitiveCache(): void;
|
|
86
|
+
//# sourceMappingURL=transitive-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transitive-resolver.d.ts","sourceRoot":"","sources":["../../src/lib/transitive-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE;QACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9B,GAAG,CAAC,EAAE,KAAK,CAAC;YACV,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC,CAAC;KACJ,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,YAAY,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,uCAAuC;IACvC,GAAG,EAAE,eAAe,EAAE,CAAC;IACvB,sBAAsB;IACtB,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,kBAAkB;IAClB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAYD;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAmWD,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,0BAA0B,CAAC,CAkDrC;AAMD,MAAM,WAAW,6BAA6B;IAC5C,iEAAiE;IACjE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,6BAA6B,CAAC,CAiGxC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
|
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transitive Dependency Resolver
|
|
3
|
+
*
|
|
4
|
+
* snapshot과 skit을 재귀적으로 탐색하여 모든 npm 패키지를 수집하고
|
|
5
|
+
* registry-proxy의 /resolve-deps API를 통해 transitive deps를 해석
|
|
6
|
+
*/
|
|
7
|
+
import { getSessionToken, REGISTRY_PROXY_URL, GITLAB_GROUP_ID } from './config.js';
|
|
8
|
+
import { fetchSnapshotFromRepo } from './gitlab.js';
|
|
9
|
+
// ============================================================
|
|
10
|
+
// Skit Manifest Fetcher
|
|
11
|
+
// ============================================================
|
|
12
|
+
const skitManifestCache = new Map();
|
|
13
|
+
/**
|
|
14
|
+
* Skit 패키지의 skit.json을 가져옴
|
|
15
|
+
*/
|
|
16
|
+
async function fetchSkitManifest(pkgName, _version) {
|
|
17
|
+
const cacheKey = `${pkgName}@${_version}`;
|
|
18
|
+
if (skitManifestCache.has(cacheKey)) {
|
|
19
|
+
return skitManifestCache.get(cacheKey);
|
|
20
|
+
}
|
|
21
|
+
const sessionToken = getSessionToken();
|
|
22
|
+
const headers = {
|
|
23
|
+
'Accept': 'application/json',
|
|
24
|
+
};
|
|
25
|
+
if (sessionToken) {
|
|
26
|
+
headers['Authorization'] = `Bearer ${sessionToken}`;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
// registry-proxy를 통해 패키지 메타데이터 조회
|
|
30
|
+
const url = `${REGISTRY_PROXY_URL}/${pkgName}`;
|
|
31
|
+
const response = await fetch(url, { headers });
|
|
32
|
+
if (!response.ok) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const data = await response.json();
|
|
36
|
+
const distTags = data['dist-tags'];
|
|
37
|
+
const versions = data['versions'];
|
|
38
|
+
// 버전 확인 (latest 또는 지정된 버전)
|
|
39
|
+
let targetVersion = _version;
|
|
40
|
+
if (_version === 'latest' && distTags?.['latest']) {
|
|
41
|
+
targetVersion = distTags['latest'];
|
|
42
|
+
}
|
|
43
|
+
const versionData = versions?.[targetVersion];
|
|
44
|
+
if (!versionData) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
// skit.json 데이터 추출 (패키지에 포함된 경우)
|
|
48
|
+
const skitConfig = versionData['skit'];
|
|
49
|
+
const manifest = {
|
|
50
|
+
name: pkgName,
|
|
51
|
+
version: targetVersion,
|
|
52
|
+
dependencies: skitConfig ? { ...skitConfig } : undefined,
|
|
53
|
+
};
|
|
54
|
+
skitManifestCache.set(cacheKey, manifest);
|
|
55
|
+
return manifest;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Snapshot을 재귀적으로 탐색
|
|
63
|
+
*/
|
|
64
|
+
async function traverseSnapshot(snapshotName, ctx) {
|
|
65
|
+
if (ctx.visitedSnapshots.has(snapshotName)) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
ctx.visitedSnapshots.add(snapshotName);
|
|
69
|
+
let snapshot;
|
|
70
|
+
try {
|
|
71
|
+
snapshot = await fetchSnapshotFromRepo(snapshotName);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
ctx.errors.push({
|
|
75
|
+
name: snapshotName,
|
|
76
|
+
error: `Failed to fetch snapshot: ${error instanceof Error ? error.message : String(error)}`,
|
|
77
|
+
});
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// extends 처리 (먼저 base snapshot 탐색)
|
|
81
|
+
if (snapshot.extends) {
|
|
82
|
+
await traverseSnapshot(snapshot.extends, ctx);
|
|
83
|
+
}
|
|
84
|
+
// registry 정보 수집 (scope → group 매핑)
|
|
85
|
+
if (snapshot.registry) {
|
|
86
|
+
for (const [scope, config] of Object.entries(snapshot.registry)) {
|
|
87
|
+
if (config.group && !ctx.scopeGroups.has(scope)) {
|
|
88
|
+
ctx.scopeGroups.set(scope, config.group);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// skits 필드 처리
|
|
93
|
+
if (snapshot.skits) {
|
|
94
|
+
for (const [name, version] of Object.entries(snapshot.skits)) {
|
|
95
|
+
if (!ctx.collectedSkit.has(name)) {
|
|
96
|
+
ctx.collectedSkit.set(name, {
|
|
97
|
+
name,
|
|
98
|
+
version,
|
|
99
|
+
isDirect: true,
|
|
100
|
+
source: 'snapshot',
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
await traverseSkit(name, version, ctx);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// install 블록 처리
|
|
107
|
+
if (snapshot.install) {
|
|
108
|
+
for (const [installerName, packages] of Object.entries(snapshot.install)) {
|
|
109
|
+
for (const [name, version] of Object.entries(packages)) {
|
|
110
|
+
if (installerName === 'skit') {
|
|
111
|
+
if (!ctx.collectedSkit.has(name)) {
|
|
112
|
+
ctx.collectedSkit.set(name, {
|
|
113
|
+
name,
|
|
114
|
+
version,
|
|
115
|
+
isDirect: true,
|
|
116
|
+
source: 'snapshot',
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
await traverseSkit(name, version, ctx);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
// npm 또는 glpkg 패키지
|
|
123
|
+
if (!ctx.collectedNpm.has(name)) {
|
|
124
|
+
ctx.collectedNpm.set(name, {
|
|
125
|
+
name,
|
|
126
|
+
version,
|
|
127
|
+
isDirect: true,
|
|
128
|
+
source: 'snapshot',
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// packages 필드 (legacy)
|
|
136
|
+
if (snapshot.packages) {
|
|
137
|
+
for (const [name, version] of Object.entries(snapshot.packages)) {
|
|
138
|
+
// -kit로 끝나면 skit으로 간주
|
|
139
|
+
if (name.endsWith('-kit') || name.endsWith('kit')) {
|
|
140
|
+
if (!ctx.collectedSkit.has(name)) {
|
|
141
|
+
ctx.collectedSkit.set(name, {
|
|
142
|
+
name,
|
|
143
|
+
version,
|
|
144
|
+
isDirect: true,
|
|
145
|
+
source: 'snapshot',
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
await traverseSkit(name, version, ctx);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
if (!ctx.collectedNpm.has(name)) {
|
|
152
|
+
ctx.collectedNpm.set(name, {
|
|
153
|
+
name,
|
|
154
|
+
version,
|
|
155
|
+
isDirect: true,
|
|
156
|
+
source: 'snapshot',
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Skit을 재귀적으로 탐색
|
|
165
|
+
*/
|
|
166
|
+
async function traverseSkit(skitName, skitVersion, ctx) {
|
|
167
|
+
const key = `${skitName}@${skitVersion}`;
|
|
168
|
+
if (ctx.visitedSkits.has(key)) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
ctx.visitedSkits.add(key);
|
|
172
|
+
const manifest = await fetchSkitManifest(skitName, skitVersion);
|
|
173
|
+
if (!manifest) {
|
|
174
|
+
// skit manifest 없으면 스킵 (콘텐츠 전용 skit일 수 있음)
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const deps = manifest.dependencies;
|
|
178
|
+
if (!deps) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
// npm 의존성 수집
|
|
182
|
+
if (deps.npm) {
|
|
183
|
+
for (const [name, version] of Object.entries(deps.npm)) {
|
|
184
|
+
if (!ctx.collectedNpm.has(name)) {
|
|
185
|
+
ctx.collectedNpm.set(name, {
|
|
186
|
+
name,
|
|
187
|
+
version,
|
|
188
|
+
isDirect: false,
|
|
189
|
+
source: 'skit',
|
|
190
|
+
requestedBy: skitName,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// skit 의존성 재귀 탐색
|
|
196
|
+
if (deps.skit) {
|
|
197
|
+
for (const [name, version] of Object.entries(deps.skit)) {
|
|
198
|
+
if (!ctx.collectedSkit.has(name)) {
|
|
199
|
+
ctx.collectedSkit.set(name, {
|
|
200
|
+
name,
|
|
201
|
+
version,
|
|
202
|
+
isDirect: false,
|
|
203
|
+
source: 'skit',
|
|
204
|
+
requestedBy: skitName,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
await traverseSkit(name, version, ctx);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// cli 의존성에서 npm 패키지 추출 시도 (deprecated, 하위호환)
|
|
211
|
+
if (deps.cli) {
|
|
212
|
+
for (const cli of deps.cli) {
|
|
213
|
+
const npmMatch = cli.install.match(/npm\s+install\s+(?:-g\s+)?(@?[\w/-]+)(?:@(\S+))?/);
|
|
214
|
+
if (npmMatch) {
|
|
215
|
+
const pkgName = npmMatch[1];
|
|
216
|
+
const pkgVersion = npmMatch[2] || 'latest';
|
|
217
|
+
if (!ctx.collectedNpm.has(pkgName)) {
|
|
218
|
+
ctx.collectedNpm.set(pkgName, {
|
|
219
|
+
name: pkgName,
|
|
220
|
+
version: pkgVersion,
|
|
221
|
+
isDirect: false,
|
|
222
|
+
source: 'skit',
|
|
223
|
+
requestedBy: skitName,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Registry-proxy의 /resolve-deps API를 호출하여
|
|
232
|
+
* npm 패키지의 transitive dependencies 해석
|
|
233
|
+
*/
|
|
234
|
+
async function resolveNpmTransitiveDeps(packages, scopes, groupId) {
|
|
235
|
+
if (packages.length === 0 || !groupId) {
|
|
236
|
+
return packages.map(p => ({
|
|
237
|
+
...p,
|
|
238
|
+
isDirect: true,
|
|
239
|
+
source: 'snapshot',
|
|
240
|
+
}));
|
|
241
|
+
}
|
|
242
|
+
const sessionToken = getSessionToken();
|
|
243
|
+
const headers = {
|
|
244
|
+
'Content-Type': 'application/json',
|
|
245
|
+
'Accept': 'application/json',
|
|
246
|
+
};
|
|
247
|
+
if (sessionToken) {
|
|
248
|
+
headers['Authorization'] = `Bearer ${sessionToken}`;
|
|
249
|
+
}
|
|
250
|
+
try {
|
|
251
|
+
const url = `${REGISTRY_PROXY_URL}/resolve-deps`;
|
|
252
|
+
const body = {
|
|
253
|
+
packages: packages.map(p => `${p.name}@${p.version}`),
|
|
254
|
+
groupId,
|
|
255
|
+
scopes,
|
|
256
|
+
includePeer: true,
|
|
257
|
+
};
|
|
258
|
+
const response = await fetch(url, {
|
|
259
|
+
method: 'POST',
|
|
260
|
+
headers,
|
|
261
|
+
body: JSON.stringify(body),
|
|
262
|
+
});
|
|
263
|
+
if (!response.ok) {
|
|
264
|
+
console.warn(`[TransitiveResolver] Failed to resolve transitive deps: ${response.status}`);
|
|
265
|
+
return packages.map(p => ({
|
|
266
|
+
...p,
|
|
267
|
+
isDirect: true,
|
|
268
|
+
source: 'snapshot',
|
|
269
|
+
}));
|
|
270
|
+
}
|
|
271
|
+
const data = await response.json();
|
|
272
|
+
return data.dependencies.map(d => ({
|
|
273
|
+
name: d.name,
|
|
274
|
+
version: d.version,
|
|
275
|
+
isDirect: d.isDirect,
|
|
276
|
+
source: 'transitive',
|
|
277
|
+
requestedBy: d.requestedBy,
|
|
278
|
+
}));
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
console.warn(`[TransitiveResolver] Error calling /resolve-deps: ${error}`);
|
|
282
|
+
return packages.map(p => ({
|
|
283
|
+
...p,
|
|
284
|
+
isDirect: true,
|
|
285
|
+
source: 'snapshot',
|
|
286
|
+
}));
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Snapshot의 모든 의존성을 재귀적으로 탐색하고
|
|
291
|
+
* npm transitive deps까지 해석
|
|
292
|
+
*/
|
|
293
|
+
export async function resolveAllDependencies(snapshotName, options = {}) {
|
|
294
|
+
const { resolveTransitive = true, scopes = ['@ist', '@microwiseai', '@glpkg'], groupId = GITLAB_GROUP_ID, } = options;
|
|
295
|
+
const ctx = {
|
|
296
|
+
visitedSnapshots: new Set(),
|
|
297
|
+
visitedSkits: new Set(),
|
|
298
|
+
collectedNpm: new Map(),
|
|
299
|
+
collectedSkit: new Map(),
|
|
300
|
+
errors: [],
|
|
301
|
+
scopeGroups: new Map(),
|
|
302
|
+
};
|
|
303
|
+
// 1. Snapshot/Skit 재귀 탐색
|
|
304
|
+
await traverseSnapshot(snapshotName, ctx);
|
|
305
|
+
// 2. npm transitive deps 해석 (optional)
|
|
306
|
+
let npmPackages = Array.from(ctx.collectedNpm.values());
|
|
307
|
+
if (resolveTransitive && npmPackages.length > 0) {
|
|
308
|
+
// 추적 대상 스코프의 패키지만 transitive 해석
|
|
309
|
+
const trackedPackages = npmPackages.filter(p => scopes.some(scope => p.name.startsWith(scope)));
|
|
310
|
+
// snapshot.registry에서 수집한 group 또는 옵션에서 제공된 groupId 사용
|
|
311
|
+
const effectiveGroupId = groupId || Array.from(ctx.scopeGroups.values())[0] || '';
|
|
312
|
+
if (trackedPackages.length > 0 && effectiveGroupId) {
|
|
313
|
+
const resolved = await resolveNpmTransitiveDeps(trackedPackages, scopes, effectiveGroupId);
|
|
314
|
+
// 기존 수집된 것과 merge
|
|
315
|
+
for (const pkg of resolved) {
|
|
316
|
+
if (!ctx.collectedNpm.has(pkg.name)) {
|
|
317
|
+
ctx.collectedNpm.set(pkg.name, pkg);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
npmPackages = Array.from(ctx.collectedNpm.values());
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
return {
|
|
324
|
+
npm: npmPackages,
|
|
325
|
+
skit: Array.from(ctx.collectedSkit.values()),
|
|
326
|
+
errors: ctx.errors,
|
|
327
|
+
scopeGroups: Object.fromEntries(ctx.scopeGroups),
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* license-api의 /resolve-deps API를 호출하여 의존성 해석
|
|
332
|
+
*
|
|
333
|
+
* @example
|
|
334
|
+
* const result = await resolveDepsFromLicenseAPI({
|
|
335
|
+
* groupId: 12345,
|
|
336
|
+
* scopes: ['@ist', '@microwiseai'],
|
|
337
|
+
* includePeer: true,
|
|
338
|
+
* });
|
|
339
|
+
* // result.dependencies: { "@ist/tda-kit": "^1.0.0" }
|
|
340
|
+
* // result.peerDependencies: { "typescript": "^5.0.0" }
|
|
341
|
+
*/
|
|
342
|
+
export async function resolveDepsFromLicenseAPI(options) {
|
|
343
|
+
const { packages, groupId, scopes, includePeer = true } = options;
|
|
344
|
+
// Validate required params
|
|
345
|
+
if (!packages || packages.length === 0) {
|
|
346
|
+
throw new Error('[resolveDepsFromLicenseAPI] packages array is required');
|
|
347
|
+
}
|
|
348
|
+
if (!groupId) {
|
|
349
|
+
throw new Error('[resolveDepsFromLicenseAPI] groupId is required');
|
|
350
|
+
}
|
|
351
|
+
if (!scopes || scopes.length === 0) {
|
|
352
|
+
throw new Error('[resolveDepsFromLicenseAPI] scopes array is required');
|
|
353
|
+
}
|
|
354
|
+
const sessionToken = getSessionToken();
|
|
355
|
+
if (!sessionToken) {
|
|
356
|
+
throw new Error('[resolveDepsFromLicenseAPI] No session token available. Please run "snapshot login" first.');
|
|
357
|
+
}
|
|
358
|
+
// Build URL: REGISTRY_PROXY_URL + /resolve-deps
|
|
359
|
+
const url = `${REGISTRY_PROXY_URL}/resolve-deps`;
|
|
360
|
+
const headers = {
|
|
361
|
+
'Content-Type': 'application/json',
|
|
362
|
+
'Accept': 'application/json',
|
|
363
|
+
'Authorization': `Bearer ${sessionToken}`,
|
|
364
|
+
};
|
|
365
|
+
const body = {
|
|
366
|
+
packages,
|
|
367
|
+
groupId,
|
|
368
|
+
scopes,
|
|
369
|
+
includePeer,
|
|
370
|
+
};
|
|
371
|
+
try {
|
|
372
|
+
const response = await fetch(url, {
|
|
373
|
+
method: 'POST',
|
|
374
|
+
headers,
|
|
375
|
+
body: JSON.stringify(body),
|
|
376
|
+
});
|
|
377
|
+
if (!response.ok) {
|
|
378
|
+
// Handle specific error codes
|
|
379
|
+
if (response.status === 401) {
|
|
380
|
+
throw new Error('[resolveDepsFromLicenseAPI] Unauthorized. Session token may be expired. Please run "snapshot login" again.');
|
|
381
|
+
}
|
|
382
|
+
if (response.status === 403) {
|
|
383
|
+
throw new Error('[resolveDepsFromLicenseAPI] Forbidden. You may not have access to this group.');
|
|
384
|
+
}
|
|
385
|
+
if (response.status === 404) {
|
|
386
|
+
throw new Error('[resolveDepsFromLicenseAPI] API endpoint not found. License API may be unavailable.');
|
|
387
|
+
}
|
|
388
|
+
const errorText = await response.text().catch(() => '');
|
|
389
|
+
throw new Error(`[resolveDepsFromLicenseAPI] HTTP ${response.status}: ${errorText || response.statusText}`);
|
|
390
|
+
}
|
|
391
|
+
const rawData = await response.json();
|
|
392
|
+
// Validate response structure
|
|
393
|
+
if (!rawData.dependencies || !Array.isArray(rawData.dependencies)) {
|
|
394
|
+
throw new Error('[resolveDepsFromLicenseAPI] Invalid response: missing dependencies array');
|
|
395
|
+
}
|
|
396
|
+
// Convert array format to Record format
|
|
397
|
+
const dependencies = {};
|
|
398
|
+
for (const dep of rawData.dependencies) {
|
|
399
|
+
if (dep.name && dep.version) {
|
|
400
|
+
dependencies[dep.name] = dep.version;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
const peerDependencies = {};
|
|
404
|
+
if (rawData.peerDependencies && Array.isArray(rawData.peerDependencies)) {
|
|
405
|
+
for (const dep of rawData.peerDependencies) {
|
|
406
|
+
if (dep.name && dep.version) {
|
|
407
|
+
peerDependencies[dep.name] = dep.version;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
return {
|
|
412
|
+
dependencies,
|
|
413
|
+
peerDependencies,
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
catch (error) {
|
|
417
|
+
// Re-throw our custom errors
|
|
418
|
+
if (error instanceof Error && error.message.startsWith('[resolveDepsFromLicenseAPI]')) {
|
|
419
|
+
throw error;
|
|
420
|
+
}
|
|
421
|
+
// Network or other errors
|
|
422
|
+
throw new Error(`[resolveDepsFromLicenseAPI] Network error: ${error instanceof Error ? error.message : String(error)}`);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* 캐시 클리어
|
|
427
|
+
*/
|
|
428
|
+
export function clearTransitiveCache() {
|
|
429
|
+
skitManifestCache.clear();
|
|
430
|
+
}
|
|
431
|
+
//# sourceMappingURL=transitive-resolver.js.map
|