@norescan/ecosystems 0.0.0-stage → 0.1.2

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.
Files changed (70) hide show
  1. package/README.md +40 -2
  2. package/dist/adapters/cpp.d.ts +14 -0
  3. package/dist/adapters/cpp.d.ts.map +1 -0
  4. package/dist/adapters/cpp.js +148 -0
  5. package/dist/adapters/cpp.js.map +1 -0
  6. package/dist/adapters/dart.d.ts +14 -0
  7. package/dist/adapters/dart.d.ts.map +1 -0
  8. package/dist/adapters/dart.js +99 -0
  9. package/dist/adapters/dart.js.map +1 -0
  10. package/dist/adapters/dotnet.d.ts +14 -0
  11. package/dist/adapters/dotnet.d.ts.map +1 -0
  12. package/dist/adapters/dotnet.js +90 -0
  13. package/dist/adapters/dotnet.js.map +1 -0
  14. package/dist/adapters/golang.d.ts +14 -0
  15. package/dist/adapters/golang.d.ts.map +1 -0
  16. package/dist/adapters/golang.js +140 -0
  17. package/dist/adapters/golang.js.map +1 -0
  18. package/dist/adapters/java.d.ts +14 -0
  19. package/dist/adapters/java.d.ts.map +1 -0
  20. package/dist/adapters/java.js +179 -0
  21. package/dist/adapters/java.js.map +1 -0
  22. package/dist/adapters/javascript.d.ts +15 -0
  23. package/dist/adapters/javascript.d.ts.map +1 -0
  24. package/dist/adapters/javascript.js +200 -0
  25. package/dist/adapters/javascript.js.map +1 -0
  26. package/dist/adapters/php.d.ts +14 -0
  27. package/dist/adapters/php.d.ts.map +1 -0
  28. package/dist/adapters/php.js +88 -0
  29. package/dist/adapters/php.js.map +1 -0
  30. package/dist/adapters/polyglot.d.ts +38 -0
  31. package/dist/adapters/polyglot.d.ts.map +1 -0
  32. package/dist/adapters/polyglot.js +176 -0
  33. package/dist/adapters/polyglot.js.map +1 -0
  34. package/dist/adapters/python.d.ts +14 -0
  35. package/dist/adapters/python.d.ts.map +1 -0
  36. package/dist/adapters/python.js +219 -0
  37. package/dist/adapters/python.js.map +1 -0
  38. package/dist/adapters/ruby.d.ts +14 -0
  39. package/dist/adapters/ruby.d.ts.map +1 -0
  40. package/dist/adapters/ruby.js +86 -0
  41. package/dist/adapters/ruby.js.map +1 -0
  42. package/dist/adapters/rust.d.ts +14 -0
  43. package/dist/adapters/rust.d.ts.map +1 -0
  44. package/dist/adapters/rust.js +167 -0
  45. package/dist/adapters/rust.js.map +1 -0
  46. package/dist/detector.d.ts +20 -0
  47. package/dist/detector.d.ts.map +1 -0
  48. package/dist/detector.js +306 -0
  49. package/dist/detector.js.map +1 -0
  50. package/dist/environment.d.ts +18 -0
  51. package/dist/environment.d.ts.map +1 -0
  52. package/dist/environment.js +119 -0
  53. package/dist/environment.js.map +1 -0
  54. package/dist/index.d.ts +17 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +33 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/registry.d.ts +25 -0
  59. package/dist/registry.d.ts.map +1 -0
  60. package/dist/registry.js +103 -0
  61. package/dist/registry.js.map +1 -0
  62. package/dist/runner.d.ts +23 -0
  63. package/dist/runner.d.ts.map +1 -0
  64. package/dist/runner.js +68 -0
  65. package/dist/runner.js.map +1 -0
  66. package/dist/types.d.ts +84 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +3 -0
  69. package/dist/types.js.map +1 -0
  70. package/package.json +42 -3
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.EnvironmentDetector = void 0;
7
+ const node_child_process_1 = require("node:child_process");
8
+ const node_util_1 = require("node:util");
9
+ const promises_1 = __importDefault(require("node:fs/promises"));
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ const execAsync = (0, node_util_1.promisify)(node_child_process_1.exec);
12
+ const REGISTERED_TOOLS = [
13
+ { tool: 'node', displayName: 'Node.js', command: 'node --version', ecosystemId: 'javascript', versionRegex: /v([0-9\.]+)/ },
14
+ { tool: 'npm', displayName: 'npm', command: 'npm --version', ecosystemId: 'javascript', versionRegex: /([0-9\.]+)/ },
15
+ { tool: 'pnpm', displayName: 'pnpm', command: 'pnpm --version', ecosystemId: 'javascript', versionRegex: /([0-9\.]+)/ },
16
+ { tool: 'yarn', displayName: 'Yarn', command: 'yarn --version', ecosystemId: 'javascript', versionRegex: /([0-9\.]+)/ },
17
+ { tool: 'bun', displayName: 'Bun', command: 'bun --version', ecosystemId: 'javascript', versionRegex: /([0-9\.]+)/ },
18
+ { tool: 'python', displayName: 'Python', command: 'python --version', ecosystemId: 'python', versionRegex: /Python\s+([0-9\.]+)/ },
19
+ { tool: 'uv', displayName: 'uv', command: 'uv --version', ecosystemId: 'python', versionRegex: /uv\s+([0-9\.]+)/ },
20
+ { tool: 'poetry', displayName: 'Poetry', command: 'poetry --version', ecosystemId: 'python', versionRegex: /Poetry.*version\s+([0-9\.]+)/ },
21
+ { tool: 'rustc', displayName: 'Rust Compiler', command: 'rustc --version', ecosystemId: 'cargo', versionRegex: /rustc\s+([0-9\.]+)/ },
22
+ { tool: 'cargo', displayName: 'Cargo', command: 'cargo --version', ecosystemId: 'cargo', versionRegex: /cargo\s+([0-9\.]+)/ },
23
+ { tool: 'go', displayName: 'Go', command: 'go version', ecosystemId: 'golang', versionRegex: /go\s+version\s+go([0-9\.]+)/ },
24
+ { tool: 'java', displayName: 'Java Runtime', command: 'java -version', ecosystemId: 'jvm', versionRegex: /version\s+["']?([0-9\._]+)/ },
25
+ { tool: 'mvn', displayName: 'Maven', command: 'mvn -version', ecosystemId: 'jvm', versionRegex: /Apache Maven\s+([0-9\.]+)/ },
26
+ { tool: 'dotnet', displayName: '.NET SDK', command: 'dotnet --version', ecosystemId: 'dotnet', versionRegex: /([0-9\.]+)/ },
27
+ { tool: 'php', displayName: 'PHP', command: 'php -v', ecosystemId: 'composer', versionRegex: /PHP\s+([0-9\.]+)/ },
28
+ { tool: 'composer', displayName: 'Composer', command: 'composer --version', ecosystemId: 'composer', versionRegex: /Composer.*version\s+([0-9\.]+)/ },
29
+ { tool: 'ruby', displayName: 'Ruby', command: 'ruby -v', ecosystemId: 'bundler', versionRegex: /ruby\s+([0-9\.]+)/ },
30
+ { tool: 'git', displayName: 'Git', command: 'git --version', ecosystemId: 'vcs', versionRegex: /git version\s+([0-9\.]+)/ },
31
+ { tool: 'cmake', displayName: 'CMake', command: 'cmake --version', ecosystemId: 'native', versionRegex: /cmake version\s+([0-9\.]+)/ },
32
+ ];
33
+ class EnvironmentDetector {
34
+ /**
35
+ * Probes system toolchain and runtime environments.
36
+ * Only checks relevant tools if ecosystemIds are provided.
37
+ */
38
+ async probeEnvironment(ecosystemIds) {
39
+ const targets = ecosystemIds && ecosystemIds.length > 0
40
+ ? REGISTERED_TOOLS.filter((t) => ecosystemIds.includes(t.ecosystemId) || t.tool === 'git')
41
+ : REGISTERED_TOOLS;
42
+ const results = [];
43
+ for (const probe of targets) {
44
+ try {
45
+ const { stdout, stderr } = await execAsync(probe.command, { timeout: 3000 });
46
+ const text = (stdout || stderr).trim();
47
+ const match = text.match(probe.versionRegex);
48
+ const version = match ? match[1] : text.split('\n')[0];
49
+ results.push({
50
+ tool: probe.tool,
51
+ displayName: probe.displayName,
52
+ installed: true,
53
+ detectedVersion: version,
54
+ compatible: true,
55
+ ecosystemId: probe.ecosystemId,
56
+ });
57
+ }
58
+ catch {
59
+ results.push({
60
+ tool: probe.tool,
61
+ displayName: probe.displayName,
62
+ installed: false,
63
+ compatible: false,
64
+ ecosystemId: probe.ecosystemId,
65
+ notes: `${probe.displayName} executable not found on system PATH`,
66
+ });
67
+ }
68
+ }
69
+ return results;
70
+ }
71
+ /**
72
+ * Validates required versions declared in repository manifests against installed toolchain.
73
+ */
74
+ async checkProjectCompatibility(projectRoot, installedEnvironments) {
75
+ const checks = [];
76
+ // 1. Check Node engine in package.json
77
+ try {
78
+ const pkg = JSON.parse(await promises_1.default.readFile(node_path_1.default.join(projectRoot, 'package.json'), 'utf8'));
79
+ if (pkg.engines?.node) {
80
+ const nodeEnv = installedEnvironments.find((e) => e.tool === 'node');
81
+ checks.push({
82
+ tool: 'Node.js',
83
+ required: pkg.engines.node,
84
+ detected: nodeEnv?.detectedVersion,
85
+ satisfied: nodeEnv?.installed ?? false,
86
+ });
87
+ }
88
+ if (pkg.packageManager) {
89
+ const [pmName, pmVer] = pkg.packageManager.split('@');
90
+ const pmEnv = installedEnvironments.find((e) => e.tool === pmName);
91
+ checks.push({
92
+ tool: pmName,
93
+ required: pmVer || 'any',
94
+ detected: pmEnv?.detectedVersion,
95
+ satisfied: pmEnv?.installed ?? false,
96
+ });
97
+ }
98
+ }
99
+ catch { }
100
+ // 2. Check go version in go.mod
101
+ try {
102
+ const mod = await promises_1.default.readFile(node_path_1.default.join(projectRoot, 'go.mod'), 'utf8');
103
+ const goMatch = mod.match(/go\s+([0-9\.]+)/);
104
+ if (goMatch) {
105
+ const goEnv = installedEnvironments.find((e) => e.tool === 'go');
106
+ checks.push({
107
+ tool: 'Go',
108
+ required: `>= ${goMatch[1]}`,
109
+ detected: goEnv?.detectedVersion,
110
+ satisfied: goEnv?.installed ?? false,
111
+ });
112
+ }
113
+ }
114
+ catch { }
115
+ return checks;
116
+ }
117
+ }
118
+ exports.EnvironmentDetector = EnvironmentDetector;
119
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export * from './types.js';
2
+ export * from './detector.js';
3
+ export * from './registry.js';
4
+ export * from './environment.js';
5
+ export * from './runner.js';
6
+ export * from './adapters/javascript.js';
7
+ export * from './adapters/python.js';
8
+ export * from './adapters/rust.js';
9
+ export * from './adapters/golang.js';
10
+ export * from './adapters/java.js';
11
+ export * from './adapters/dotnet.js';
12
+ export * from './adapters/php.js';
13
+ export * from './adapters/ruby.js';
14
+ export * from './adapters/dart.js';
15
+ export * from './adapters/cpp.js';
16
+ export * from './adapters/polyglot.js';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types.js"), exports);
18
+ __exportStar(require("./detector.js"), exports);
19
+ __exportStar(require("./registry.js"), exports);
20
+ __exportStar(require("./environment.js"), exports);
21
+ __exportStar(require("./runner.js"), exports);
22
+ __exportStar(require("./adapters/javascript.js"), exports);
23
+ __exportStar(require("./adapters/python.js"), exports);
24
+ __exportStar(require("./adapters/rust.js"), exports);
25
+ __exportStar(require("./adapters/golang.js"), exports);
26
+ __exportStar(require("./adapters/java.js"), exports);
27
+ __exportStar(require("./adapters/dotnet.js"), exports);
28
+ __exportStar(require("./adapters/php.js"), exports);
29
+ __exportStar(require("./adapters/ruby.js"), exports);
30
+ __exportStar(require("./adapters/dart.js"), exports);
31
+ __exportStar(require("./adapters/cpp.js"), exports);
32
+ __exportStar(require("./adapters/polyglot.js"), exports);
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,gDAA8B;AAC9B,gDAA8B;AAC9B,mDAAiC;AACjC,8CAA4B;AAC5B,2DAAyC;AACzC,uDAAqC;AACrC,qDAAmC;AACnC,uDAAqC;AACrC,qDAAmC;AACnC,uDAAqC;AACrC,oDAAkC;AAClC,qDAAmC;AACnC,qDAAmC;AACnC,oDAAkC;AAClC,yDAAuC"}
@@ -0,0 +1,25 @@
1
+ import { EcosystemAdapter, PackageDependency, ProjectCommand, WorkspaceMember } from './types.js';
2
+ export declare class EcosystemRegistry {
3
+ private adapters;
4
+ constructor();
5
+ register(adapter: EcosystemAdapter): void;
6
+ getAdapter(id: string): EcosystemAdapter | undefined;
7
+ getAllAdapters(): EcosystemAdapter[];
8
+ /**
9
+ * Discovers which ecosystems are active in this repository based on manifests and files.
10
+ */
11
+ detectActiveEcosystems(projectRoot: string): Promise<EcosystemAdapter[]>;
12
+ /**
13
+ * Aggregates all package dependencies declared across all active ecosystems.
14
+ */
15
+ extractAllDependencies(projectRoot: string): Promise<PackageDependency[]>;
16
+ /**
17
+ * Aggregates all project commands discovered from manifests and configurations.
18
+ */
19
+ extractAllCommands(projectRoot: string): Promise<ProjectCommand[]>;
20
+ /**
21
+ * Discovers monorepo workspaces across active ecosystems.
22
+ */
23
+ detectAllWorkspaces(projectRoot: string): Promise<WorkspaceMember[]>;
24
+ }
25
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAalG,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAA4C;;IAkBrD,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAIzC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIpD,cAAc,IAAI,gBAAgB,EAAE;IAI3C;;OAEG;IACU,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAYrF;;OAEG;IACU,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAYtF;;OAEG;IACU,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAY/E;;OAEG;IACU,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CAWlF"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EcosystemRegistry = void 0;
4
+ const javascript_js_1 = require("./adapters/javascript.js");
5
+ const python_js_1 = require("./adapters/python.js");
6
+ const rust_js_1 = require("./adapters/rust.js");
7
+ const golang_js_1 = require("./adapters/golang.js");
8
+ const java_js_1 = require("./adapters/java.js");
9
+ const dotnet_js_1 = require("./adapters/dotnet.js");
10
+ const php_js_1 = require("./adapters/php.js");
11
+ const ruby_js_1 = require("./adapters/ruby.js");
12
+ const dart_js_1 = require("./adapters/dart.js");
13
+ const cpp_js_1 = require("./adapters/cpp.js");
14
+ const polyglot_js_1 = require("./adapters/polyglot.js");
15
+ class EcosystemRegistry {
16
+ adapters = new Map();
17
+ constructor() {
18
+ this.register(new javascript_js_1.JavaScriptAdapter());
19
+ this.register(new python_js_1.PythonAdapter());
20
+ this.register(new rust_js_1.RustAdapter());
21
+ this.register(new golang_js_1.GoAdapter());
22
+ this.register(new java_js_1.JavaAdapter());
23
+ this.register(new dotnet_js_1.DotnetAdapter());
24
+ this.register(new php_js_1.PhpAdapter());
25
+ this.register(new ruby_js_1.RubyAdapter());
26
+ this.register(new dart_js_1.DartAdapter());
27
+ this.register(new cpp_js_1.CppAdapter());
28
+ this.register(new polyglot_js_1.SwiftAdapter());
29
+ this.register(new polyglot_js_1.ElixirAdapter());
30
+ this.register(new polyglot_js_1.ZigAdapter());
31
+ }
32
+ register(adapter) {
33
+ this.adapters.set(adapter.id, adapter);
34
+ }
35
+ getAdapter(id) {
36
+ return this.adapters.get(id);
37
+ }
38
+ getAllAdapters() {
39
+ return Array.from(this.adapters.values());
40
+ }
41
+ /**
42
+ * Discovers which ecosystems are active in this repository based on manifests and files.
43
+ */
44
+ async detectActiveEcosystems(projectRoot) {
45
+ const active = [];
46
+ for (const adapter of this.adapters.values()) {
47
+ try {
48
+ if (await adapter.detect(projectRoot)) {
49
+ active.push(adapter);
50
+ }
51
+ }
52
+ catch { }
53
+ }
54
+ return active;
55
+ }
56
+ /**
57
+ * Aggregates all package dependencies declared across all active ecosystems.
58
+ */
59
+ async extractAllDependencies(projectRoot) {
60
+ const active = await this.detectActiveEcosystems(projectRoot);
61
+ const results = [];
62
+ for (const adapter of active) {
63
+ try {
64
+ const deps = await adapter.extractDependencies(projectRoot);
65
+ results.push(...deps);
66
+ }
67
+ catch { }
68
+ }
69
+ return results;
70
+ }
71
+ /**
72
+ * Aggregates all project commands discovered from manifests and configurations.
73
+ */
74
+ async extractAllCommands(projectRoot) {
75
+ const active = await this.detectActiveEcosystems(projectRoot);
76
+ const results = [];
77
+ for (const adapter of active) {
78
+ try {
79
+ const cmds = await adapter.extractCommands(projectRoot);
80
+ results.push(...cmds);
81
+ }
82
+ catch { }
83
+ }
84
+ return results;
85
+ }
86
+ /**
87
+ * Discovers monorepo workspaces across active ecosystems.
88
+ */
89
+ async detectAllWorkspaces(projectRoot) {
90
+ const active = await this.detectActiveEcosystems(projectRoot);
91
+ const results = [];
92
+ for (const adapter of active) {
93
+ try {
94
+ const members = await adapter.detectWorkspaces(projectRoot);
95
+ results.push(...members);
96
+ }
97
+ catch { }
98
+ }
99
+ return results;
100
+ }
101
+ }
102
+ exports.EcosystemRegistry = EcosystemRegistry;
103
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ProjectCommand } from './types.js';
2
+ export interface CommandInspection {
3
+ command: ProjectCommand;
4
+ isDestructive: boolean;
5
+ requiresNetwork: boolean;
6
+ changesFiles: boolean;
7
+ explanation: string;
8
+ safetyWarnings: string[];
9
+ }
10
+ export declare class SafeCommandRunner {
11
+ /**
12
+ * Inspects a project command and provides safety classification and warnings.
13
+ */
14
+ inspectCommand(command: ProjectCommand): CommandInspection;
15
+ /**
16
+ * Validates if a command is allowed to run.
17
+ */
18
+ validateExecution(command: ProjectCommand): {
19
+ allowed: boolean;
20
+ reason?: string;
21
+ };
22
+ }
23
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAYD,qBAAa,iBAAiB;IAC5B;;OAEG;IACI,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,iBAAiB;IA4CjE;;OAEG;IACI,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;CAUzF"}
package/dist/runner.js ADDED
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SafeCommandRunner = void 0;
4
+ const FORBIDDEN_PATTERNS = [
5
+ /curl.*\|\s*(ba)?sh/i,
6
+ /wget.*\|\s*(ba)?sh/i,
7
+ /rm\s+-rf\s+[\/~]/i,
8
+ /drop\s+database/i,
9
+ /format\s+[c-z]:/i,
10
+ /:(){ :\|:& };:/, // Fork bomb
11
+ /sudo\s+rm/i,
12
+ ];
13
+ class SafeCommandRunner {
14
+ /**
15
+ * Inspects a project command and provides safety classification and warnings.
16
+ */
17
+ inspectCommand(command) {
18
+ const raw = command.rawCommand;
19
+ const warnings = [];
20
+ let isDestructive = false;
21
+ let changesFiles = false;
22
+ let requiresNetwork = command.requiresNetwork;
23
+ for (const pattern of FORBIDDEN_PATTERNS) {
24
+ if (pattern.test(raw)) {
25
+ isDestructive = true;
26
+ warnings.push(`Command matches blocked unsafe execution pattern: ${pattern.toString()}`);
27
+ }
28
+ }
29
+ if (raw.includes('install') || raw.includes('add') || raw.includes('update')) {
30
+ changesFiles = true;
31
+ requiresNetwork = true;
32
+ }
33
+ if (command.category === 'build' || command.category === 'migration' || command.category === 'cleanup') {
34
+ changesFiles = true;
35
+ }
36
+ if (command.category === 'cleanup' || raw.includes('rimraf') || raw.includes('clean')) {
37
+ isDestructive = true;
38
+ warnings.push('This command will delete files or build artifacts.');
39
+ }
40
+ let explanation = `Executes "${command.name}" configured in ${command.sourceFile}.`;
41
+ if (changesFiles) {
42
+ explanation += ' This command may modify files or download packages.';
43
+ }
44
+ return {
45
+ command,
46
+ isDestructive,
47
+ requiresNetwork,
48
+ changesFiles,
49
+ explanation,
50
+ safetyWarnings: warnings,
51
+ };
52
+ }
53
+ /**
54
+ * Validates if a command is allowed to run.
55
+ */
56
+ validateExecution(command) {
57
+ const inspection = this.inspectCommand(command);
58
+ if (inspection.safetyWarnings.some((w) => w.includes('blocked unsafe execution pattern'))) {
59
+ return {
60
+ allowed: false,
61
+ reason: 'Command blocked by security policy due to unsafe execution pattern.',
62
+ };
63
+ }
64
+ return { allowed: true };
65
+ }
66
+ }
67
+ exports.SafeCommandRunner = SafeCommandRunner;
68
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":";;;AAWA,MAAM,kBAAkB,GAAG;IACzB,qBAAqB;IACrB,qBAAqB;IACrB,mBAAmB;IACnB,kBAAkB;IAClB,kBAAkB;IAClB,gBAAgB,EAAE,YAAY;IAC9B,YAAY;CACb,CAAC;AAEF,MAAa,iBAAiB;IAC5B;;OAEG;IACI,cAAc,CAAC,OAAuB;QAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC;QAC/B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QAE9C,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,aAAa,GAAG,IAAI,CAAC;gBACrB,QAAQ,CAAC,IAAI,CAAC,qDAAqD,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;QAED,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7E,YAAY,GAAG,IAAI,CAAC;YACpB,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACvG,YAAY,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACtF,aAAa,GAAG,IAAI,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,WAAW,GAAG,aAAa,OAAO,CAAC,IAAI,mBAAmB,OAAO,CAAC,UAAU,GAAG,CAAC;QACpF,IAAI,YAAY,EAAE,CAAC;YACjB,WAAW,IAAI,sDAAsD,CAAC;QACxE,CAAC;QAED,OAAO;YACL,OAAO;YACP,aAAa;YACb,eAAe;YACf,YAAY;YACZ,WAAW;YACX,cAAc,EAAE,QAAQ;SACzB,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,iBAAiB,CAAC,OAAuB;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC,EAAE,CAAC;YAC1F,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,qEAAqE;aAC9E,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF;AA7DD,8CA6DC"}
@@ -0,0 +1,84 @@
1
+ export type SupportedLanguage = 'javascript' | 'typescript' | 'python' | 'rust' | 'golang' | 'java' | 'kotlin' | 'c' | 'cpp' | 'csharp' | 'php' | 'ruby' | 'swift' | 'objective-c' | 'dart' | 'flutter' | 'elixir' | 'erlang' | 'haskell' | 'lua' | 'r' | 'julia' | 'perl' | 'zig' | 'scala' | 'clojure' | 'shell' | 'powershell' | 'sql' | 'html' | 'css';
2
+ export interface LanguageStat {
3
+ language: SupportedLanguage;
4
+ displayName: string;
5
+ fileCount: number;
6
+ byteCount: number;
7
+ percentage: number;
8
+ confidence: number;
9
+ primaryFrameworks: string[];
10
+ }
11
+ export interface MonorepoComponent {
12
+ name: string;
13
+ relativePath: string;
14
+ primaryLanguage: SupportedLanguage;
15
+ ecosystemId: string;
16
+ manifestPath: string;
17
+ description?: string;
18
+ }
19
+ export type DependencyCategory = 'production' | 'development' | 'peer' | 'optional' | 'build' | 'runtime' | 'system';
20
+ export interface PackageDependency {
21
+ name: string;
22
+ declaredVersion: string;
23
+ resolvedVersion?: string;
24
+ versionConstraint?: string;
25
+ dependencyType: DependencyCategory;
26
+ isDirect: boolean;
27
+ isOptional: boolean;
28
+ registry?: string;
29
+ manifestPath: string;
30
+ platformCondition?: string;
31
+ parent?: string;
32
+ }
33
+ export type CommandCategory = 'install' | 'setup' | 'environment' | 'build' | 'development' | 'start' | 'run' | 'test' | 'lint' | 'format' | 'typecheck' | 'deploy' | 'migration' | 'cleanup' | 'diagnostics';
34
+ export interface ProjectCommand {
35
+ name: string;
36
+ rawCommand: string;
37
+ category: CommandCategory;
38
+ sourceFile: string;
39
+ workingDir: string;
40
+ description?: string;
41
+ safeToRun: boolean;
42
+ requiresNetwork: boolean;
43
+ ecosystemId: string;
44
+ }
45
+ export interface RuntimeEnvironment {
46
+ tool: string;
47
+ displayName: string;
48
+ installed: boolean;
49
+ detectedVersion?: string;
50
+ requiredVersion?: string;
51
+ executablePath?: string;
52
+ compatible: boolean;
53
+ ecosystemId: string;
54
+ notes?: string;
55
+ }
56
+ export interface WorkspaceMember {
57
+ name: string;
58
+ relativePath: string;
59
+ ecosystemId: string;
60
+ manifestPath: string;
61
+ dependencies: string[];
62
+ }
63
+ export interface EcosystemMetadata {
64
+ id: string;
65
+ displayName: string;
66
+ supportedLanguages: SupportedLanguage[];
67
+ manifestFiles: string[];
68
+ lockFiles: string[];
69
+ configFiles: string[];
70
+ }
71
+ export interface EcosystemAdapter {
72
+ readonly id: string;
73
+ readonly displayName: string;
74
+ readonly supportedLanguages: SupportedLanguage[];
75
+ readonly manifestFiles: string[];
76
+ readonly lockFiles: string[];
77
+ detect(projectRoot: string): Promise<boolean>;
78
+ extractDependencies(projectRoot: string): Promise<PackageDependency[]>;
79
+ extractCommands(projectRoot: string): Promise<ProjectCommand[]>;
80
+ detectWorkspaces(projectRoot: string): Promise<WorkspaceMember[]>;
81
+ suggestCommands(projectRoot: string): Promise<ProjectCommand[]>;
82
+ checkEnvironment?(projectRoot: string): Promise<RuntimeEnvironment[]>;
83
+ }
84
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,45 @@
1
1
  {
2
2
  "name": "@norescan/ecosystems",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.2",
4
+ "description": "Universal polyglot language detection, package manager adapters, command intelligence, and environment probing for norescan",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "dependencies": {
11
+ "@norescan/shared": "0.1.2",
12
+ "zod": "^3.24.2"
13
+ },
14
+ "devDependencies": {
15
+ "@types/node": "^22.13.10",
16
+ "typescript": "^5.8.2",
17
+ "vitest": "^3.0.8"
18
+ },
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "license": "Apache-2.0",
23
+ "homepage": "https://github.com/th3karn/NoReScan#readme",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "https://github.com/th3karn/NoReScan.git",
27
+ "directory": "packages/ecosystems"
28
+ },
29
+ "keywords": [
30
+ "norescan",
31
+ "ecosystems",
32
+ "polyglot",
33
+ "runtime-detection",
34
+ "node",
35
+ "python",
36
+ "rust",
37
+ "go"
38
+ ],
39
+ "scripts": {
40
+ "build": "tsc",
41
+ "clean": "rimraf dist",
42
+ "typecheck": "tsc --noEmit",
43
+ "test": "vitest run"
44
+ }
6
45
  }