@open-mercato/cli 0.6.8-develop.6931.1.4a1e1c786b → 0.6.8-develop.6940.1.177ea30c6e
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/.turbo/turbo-build.log +65 -1
- package/build.mjs +57 -7
- package/dist/agentic/guides/backend-ui.md +7 -1
- package/dist/agentic/guides/module-facts.json +565 -224
- package/dist/agentic/guides/module-facts.v2.json +122933 -0
- package/dist/agentic/guides/modules/ai_assistant.md +2 -2
- package/dist/agentic/guides/modules/api_docs.md +2 -2
- package/dist/agentic/guides/modules/api_keys.md +2 -2
- package/dist/agentic/guides/modules/attachments.md +2 -2
- package/dist/agentic/guides/modules/audit_logs.md +2 -2
- package/dist/agentic/guides/modules/auth.md +2 -2
- package/dist/agentic/guides/modules/business_rules.md +2 -2
- package/dist/agentic/guides/modules/catalog.md +11 -4
- package/dist/agentic/guides/modules/channel_gmail.md +2 -2
- package/dist/agentic/guides/modules/channel_imap.md +2 -2
- package/dist/agentic/guides/modules/checkout.md +8 -2
- package/dist/agentic/guides/modules/communication_channels.md +6 -6
- package/dist/agentic/guides/modules/configs.md +2 -2
- package/dist/agentic/guides/modules/content.md +2 -2
- package/dist/agentic/guides/modules/currencies.md +2 -2
- package/dist/agentic/guides/modules/customer_accounts.md +2 -2
- package/dist/agentic/guides/modules/customers.md +8 -8
- package/dist/agentic/guides/modules/dashboards.md +12 -12
- package/dist/agentic/guides/modules/data_sync.md +4 -4
- package/dist/agentic/guides/modules/design_system.md +2 -2
- package/dist/agentic/guides/modules/dictionaries.md +2 -2
- package/dist/agentic/guides/modules/directory.md +2 -2
- package/dist/agentic/guides/modules/entities.md +3 -3
- package/dist/agentic/guides/modules/eudr.md +3 -3
- package/dist/agentic/guides/modules/events.md +2 -2
- package/dist/agentic/guides/modules/feature_toggles.md +2 -2
- package/dist/agentic/guides/modules/gateway_stripe.md +2 -2
- package/dist/agentic/guides/modules/generators.md +2 -2
- package/dist/agentic/guides/modules/inbox_ops.md +2 -2
- package/dist/agentic/guides/modules/integrations.md +5 -2
- package/dist/agentic/guides/modules/messages.md +2 -2
- package/dist/agentic/guides/modules/notifications.md +2 -2
- package/dist/agentic/guides/modules/onboarding.md +2 -2
- package/dist/agentic/guides/modules/payment_gateways.md +7 -3
- package/dist/agentic/guides/modules/perspectives.md +2 -2
- package/dist/agentic/guides/modules/planner.md +2 -2
- package/dist/agentic/guides/modules/portal.md +2 -2
- package/dist/agentic/guides/modules/progress.md +2 -2
- package/dist/agentic/guides/modules/query_index.md +2 -2
- package/dist/agentic/guides/modules/record_locks.md +3 -3
- package/dist/agentic/guides/modules/resources.md +2 -2
- package/dist/agentic/guides/modules/sales.md +13 -4
- package/dist/agentic/guides/modules/scheduler.md +2 -2
- package/dist/agentic/guides/modules/search.md +4 -4
- package/dist/agentic/guides/modules/security.md +3 -3
- package/dist/agentic/guides/modules/shipping_carriers.md +2 -2
- package/dist/agentic/guides/modules/sso.md +2 -2
- package/dist/agentic/guides/modules/staff.md +7 -4
- package/dist/agentic/guides/modules/storage_s3.md +2 -2
- package/dist/agentic/guides/modules/sync_akeneo.md +4 -4
- package/dist/agentic/guides/modules/sync_excel.md +2 -2
- package/dist/agentic/guides/modules/system_status_overlays.md +2 -2
- package/dist/agentic/guides/modules/translations.md +2 -2
- package/dist/agentic/guides/modules/webhooks.md +2 -2
- package/dist/agentic/guides/modules/wms.md +31 -4
- package/dist/agentic/guides/modules/workflows.md +2 -2
- package/dist/agentic/guides/reference-module-facts.json +8335 -0
- package/dist/agentic/guides/reference-modules/example.md +489 -0
- package/dist/agentic/guides/spec-delivery.md +34 -0
- package/dist/agentic/guides/testing-debugging.md +2 -1
- package/dist/agentic/guides/upstream/BACKWARD_COMPATIBILITY.md +3 -2
- package/dist/agentic/guides/upstream/manifest.json +2 -2
- package/dist/agentic/shared/AGENTS.md.template +10 -14
- package/dist/agentic/shared/ai/harness/README.md +4 -4
- package/dist/agentic/shared/ai/harness/RELEASE.md +4 -4
- package/dist/agentic/shared/ai/harness/cases.json +11350 -5088
- package/dist/agentic/shared/ai/harness/cases.schema.json +70 -7
- package/dist/agentic/shared/ai/harness/design-system-inventory.json +6697 -0
- package/dist/agentic/shared/ai/harness/fixtures/index.json +3 -1
- package/dist/agentic/shared/ai/harness/fixtures/seeds.json +4 -0
- package/dist/agentic/shared/ai/harness/knowledge-change.schema.json +228 -0
- package/dist/agentic/shared/ai/harness/release-matrix.json +9 -4
- package/dist/agentic/shared/ai/harness/result.schema.json +60 -0
- package/dist/agentic/shared/ai/harness/routing-response.schema.json +10 -0
- package/dist/agentic/shared/ai/harness/source-link-inventory.json +3231 -0
- package/dist/agentic/shared/ai/harness/validators.json +8 -4
- package/dist/agentic/shared/ai/harness/writable-ast-oracles.mjs +5 -2
- package/dist/agentic/shared/ai/harness/writable-behavior-oracles.mjs +3 -0
- package/dist/agentic/shared/ai/harness/writable-spec-oracles.mjs +879 -0
- package/dist/agentic/shared/ai/skills/om-auto-upgrade-0.6.7-to-0.7.0/SKILL.md +102 -0
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/SKILL.md +1 -0
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/crud-surfaces.md +15 -0
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/frontend-and-design-system.md +6 -0
- package/dist/agentic/shared/ai/skills/om-backend-ui-design/references/page-and-navigation.md +4 -0
- package/dist/agentic/shared/ai/skills/om-data-model-design/SKILL.md +1 -0
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/integrity-and-concurrency.md +2 -0
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/migration-workflow.md +2 -0
- package/dist/agentic/shared/ai/skills/om-data-model-design/references/schema-design.md +3 -1
- package/dist/agentic/shared/ai/skills/om-eject-and-customize/SKILL.md +1 -0
- package/dist/agentic/shared/ai/skills/om-eject-and-customize/references/decision-and-procedure.md +2 -0
- package/dist/agentic/shared/ai/skills/om-evolve-harness/SKILL.md +2 -0
- package/dist/agentic/shared/ai/skills/om-evolve-harness/references/case-template.md +3 -3
- package/dist/agentic/shared/ai/skills/om-evolve-harness/references/case-workflow.md +1 -1
- package/dist/agentic/shared/ai/skills/om-evolve-harness/references/knowledge-change.md +133 -0
- package/dist/agentic/shared/ai/skills/om-integration-builder/SKILL.md +1 -0
- package/dist/agentic/shared/ai/skills/om-integration-builder/references/provider-families.md +11 -0
- package/dist/agentic/shared/ai/skills/om-judge-agent-session/references/judge-workflow.md +1 -1
- package/dist/agentic/shared/ai/skills/om-module-scaffold/SKILL.md +2 -2
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/api-and-domain.md +14 -1
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/data-and-migrations.md +2 -0
- package/dist/agentic/shared/ai/skills/om-module-scaffold/references/module-surfaces.md +19 -0
- package/dist/agentic/shared/ai/skills/om-share-this-session/scripts/prepare-share-bundle.mjs +1 -4
- package/dist/agentic/shared/ai/skills/om-system-extension/SKILL.md +1 -0
- package/dist/agentic/shared/ai/skills/om-system-extension/references/extension-branches.md +24 -0
- package/dist/agentic/shared/ai/skills/om-system-extension/references/unified-overrides.md +3 -1
- package/dist/agentic/shared/ai/skills/om-troubleshooter/SKILL.md +1 -0
- package/dist/agentic/shared/ai/skills/om-troubleshooter/references/diagnosis-map.md +13 -0
- package/dist/agentic/shared/ai/skills/tiers.json +2 -1
- package/dist/agentic/shared/ai/specs/2026-08-06-reference-module-activation.md +248 -0
- package/dist/agentic/shared/scripts/agent-harness-tool-server.mjs +39 -2
- package/dist/agentic/shared/scripts/design-source-contract.mjs +108 -0
- package/dist/agentic/shared/scripts/evaluate-agent-harness.mjs +935 -28
- package/dist/agentic/shared/scripts/framework-context.mjs +4 -1
- package/dist/agentic/shared/scripts/run-agent-harness-release.mjs +1 -1
- package/dist/agentic/shared/scripts/validate-knowledge-change.mjs +1511 -0
- package/dist/lib/__integration__/TC-INT-008.spec.js +1 -0
- package/dist/lib/__integration__/TC-INT-008.spec.js.map +2 -2
- package/dist/lib/agentic-setup.js +9 -1
- package/dist/lib/agentic-setup.js.map +2 -2
- package/dist/lib/generators/module-extension-facts.js +93 -26
- package/dist/lib/generators/module-extension-facts.js.map +3 -3
- package/dist/lib/generators/module-facts-discovery.js +23 -0
- package/dist/lib/generators/module-facts-discovery.js.map +2 -2
- package/dist/lib/generators/module-facts.js +969 -41
- package/dist/lib/generators/module-facts.js.map +2 -2
- package/dist/lib/generators/module-override-targets.js +35 -11
- package/dist/lib/generators/module-override-targets.js.map +2 -2
- package/dist/lib/generators/module-registry.js +105 -2
- package/dist/lib/generators/module-registry.js.map +2 -2
- package/dist/lib/resolver.js +5 -0
- package/dist/lib/resolver.js.map +2 -2
- package/dist/lib/testing/integration-discovery.js +34 -0
- package/dist/lib/testing/integration-discovery.js.map +2 -2
- package/dist/lib/testing/integration.js +0 -2
- package/dist/lib/testing/integration.js.map +2 -2
- package/dist/mercato.js +4 -4
- package/dist/mercato.js.map +2 -2
- package/package.json +6 -6
- package/src/lib/__integration__/TC-INT-008.spec.ts +4 -2
- package/src/lib/__tests__/resolve-environment.test.ts +18 -0
- package/src/lib/agentic-setup.ts +10 -2
- package/src/lib/generators/__tests__/helpers/override-target-diagnostic-fixtures.ts +150 -0
- package/src/lib/generators/__tests__/module-extension-facts.test.ts +290 -0
- package/src/lib/generators/__tests__/module-facts.bc-guard.test.ts +72 -7
- package/src/lib/generators/__tests__/module-facts.computed-di-token.test.ts +88 -0
- package/src/lib/generators/__tests__/module-facts.example-fact-coverage.test.ts +502 -0
- package/src/lib/generators/__tests__/module-facts.local-reference.test.ts +414 -0
- package/src/lib/generators/__tests__/module-facts.search-entity-id.test.ts +151 -0
- package/src/lib/generators/__tests__/module-facts.source-links.test.ts +42 -1
- package/src/lib/generators/__tests__/module-override-targets.diagnostic-wiring.test.ts +92 -0
- package/src/lib/generators/__tests__/module-override-targets.test.ts +24 -0
- package/src/lib/generators/__tests__/module-override-targets.unknown-mode.test.ts +117 -0
- package/src/lib/generators/__tests__/module-subset.test.ts +60 -0
- package/src/lib/generators/module-extension-facts.ts +181 -25
- package/src/lib/generators/module-facts-discovery.ts +46 -0
- package/src/lib/generators/module-facts.ts +1330 -86
- package/src/lib/generators/module-override-targets.ts +70 -26
- package/src/lib/generators/module-registry.ts +135 -2
- package/src/lib/resolver.ts +6 -1
- package/src/lib/testing/__tests__/integration-discovery.test.ts +35 -0
- package/src/lib/testing/integration-discovery.ts +50 -0
- package/src/lib/testing/integration.ts +0 -2
- package/src/mercato.ts +3 -3
|
@@ -73,7 +73,30 @@ function discoverPackageModuleSources(resolver) {
|
|
|
73
73
|
}
|
|
74
74
|
return resolveDuplicateModuleIds(sources, resolver);
|
|
75
75
|
}
|
|
76
|
+
const LOCAL_MODULES_DIRECTORY = path.posix.join("src", "modules");
|
|
77
|
+
function discoverLocalReferenceModuleSource(options) {
|
|
78
|
+
const moduleRoot = path.join(options.appRoot, "src", "modules", options.moduleId);
|
|
79
|
+
if (!hasReadableModuleSource(moduleRoot)) return null;
|
|
80
|
+
return {
|
|
81
|
+
moduleId: options.moduleId,
|
|
82
|
+
moduleRoot,
|
|
83
|
+
portableSourceRoot: path.posix.join(LOCAL_MODULES_DIRECTORY, options.moduleId),
|
|
84
|
+
sourceKind: "local-reference"
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function appendLocalReferenceModuleSource(packageSources, reference) {
|
|
88
|
+
const conflict = packageSources.find((source) => source.moduleId === reference.moduleId);
|
|
89
|
+
if (conflict) {
|
|
90
|
+
throw new Error(
|
|
91
|
+
`[module-facts] local reference module "${reference.moduleId}" collides with the module provided by ${conflict.from ?? "<unknown package>"}. Rename the app-local module or remove the package providing it.`
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
return [...packageSources, reference];
|
|
95
|
+
}
|
|
76
96
|
export {
|
|
97
|
+
LOCAL_MODULES_DIRECTORY,
|
|
98
|
+
appendLocalReferenceModuleSource,
|
|
99
|
+
discoverLocalReferenceModuleSource,
|
|
77
100
|
discoverPackageModuleSources,
|
|
78
101
|
hasReadableModuleSource
|
|
79
102
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/generators/module-facts-discovery.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from 'node:fs'\nimport path from 'node:path'\nimport type { PackageResolver } from '../resolver'\nimport { discoverModulesInPackage } from '../module-package'\nimport type { ModuleFactSource } from './module-facts'\n\nconst READABLE_CONVENTION_FILES = [\n 'index',\n 'acl',\n 'events',\n 'di',\n path.join('data', 'entities'),\n path.join('db', 'entities'),\n]\n\n/**\n * True when the module directory exposes at least one recognised convention file as\n * TypeScript source. This is the auto-discovery boundary that skips `.js`-only\n * installs (standalone `node_modules/@open-mercato/<pkg>/dist/modules`) \u2014 the extractor's\n * ts-morph reader only parses `.ts`/`.tsx`, so a `.js`-only root would yield empty facts.\n */\nexport function hasReadableModuleSource(moduleRoot: string): boolean {\n if (!fs.existsSync(moduleRoot)) return false\n for (const basename of READABLE_CONVENTION_FILES) {\n for (const extension of ['.ts', '.tsx']) {\n if (fs.existsSync(path.join(moduleRoot, `${basename}${extension}`))) return true\n }\n }\n return false\n}\n\nfunction resolveDuplicateModuleIds(\n sources: ModuleFactSource[],\n resolver: PackageResolver,\n): ModuleFactSource[] {\n const sourcesByModule = new Map<string, ModuleFactSource[]>()\n for (const source of sources) {\n const matches = sourcesByModule.get(source.moduleId) ?? []\n matches.push(source)\n sourcesByModule.set(source.moduleId, matches)\n }\n\n const duplicates = [...sourcesByModule.entries()].filter(([, matches]) => matches.length > 1)\n if (duplicates.length === 0) return sources\n\n const selectedProviders = new Map<string, Set<string>>()\n const implicitCoreSelections = new Set<string>()\n for (const entry of resolver.loadEnabledModules()) {\n const providers = selectedProviders.get(entry.id) ?? new Set<string>()\n providers.add(entry.from ?? '@open-mercato/core')\n selectedProviders.set(entry.id, providers)\n if (entry.from === undefined) implicitCoreSelections.add(entry.id)\n }\n\n const selectedSources = new Map<string, ModuleFactSource>()\n for (const [moduleId, matches] of duplicates) {\n const providers = [...new Set(matches.map((source) => source.from ?? '<unknown>'))]\n .sort((left, right) => left.localeCompare(right))\n const configuredProviders = [...(selectedProviders.get(moduleId) ?? [])]\n .sort((left, right) => left.localeCompare(right))\n const selected = configuredProviders.length === 1\n ? matches.filter((source) => source.from === configuredProviders[0])\n : []\n\n if (selected.length !== 1) {\n const configured = configuredProviders.length > 0\n ? implicitCoreSelections.has(moduleId)\n ? '; src/modules.ts omits \"from\", which defaults to @open-mercato/core'\n : `; src/modules.ts selects ${configuredProviders.join(', ')}`\n : '; src/modules.ts does not select a provider'\n throw new Error(\n `[module-facts] duplicate module id \"${moduleId}\" is provided by ${providers.join(', ')}${configured}. `\n + 'Select exactly one matching provider in src/modules.ts.',\n )\n }\n selectedSources.set(moduleId, selected[0])\n }\n\n const emitted = new Set<string>()\n const result: ModuleFactSource[] = []\n for (const source of sources) {\n if (emitted.has(source.moduleId)) continue\n emitted.add(source.moduleId)\n result.push(selectedSources.get(source.moduleId) ?? source)\n }\n return result\n}\n\n/**\n * Package-scan discovery for the create-app build: every package-provided module\n * across `@open-mercato/*` workspace packages (core plus others), never `apps/*`\n * demo modules. Routes through the resolver rather than hardcoded paths.\n */\nexport function discoverPackageModuleSources(resolver: PackageResolver): ModuleFactSource[] {\n const sources: ModuleFactSource[] = []\n for (const pkg of resolver.discoverPackages()) {\n for (const discovered of discoverModulesInPackage(pkg.path)) {\n const moduleRoot = path.join(pkg.modulesPath, discovered.moduleId)\n if (!hasReadableModuleSource(moduleRoot)) continue\n sources.push({\n moduleId: discovered.moduleId,\n moduleRoot,\n from: pkg.name,\n packageVersion: pkg.version ?? null,\n })\n }\n }\n return resolveDuplicateModuleIds(sources, resolver)\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import fs from 'node:fs'\nimport path from 'node:path'\nimport type { PackageResolver } from '../resolver'\nimport { discoverModulesInPackage } from '../module-package'\nimport type { ModuleFactSource } from './module-facts'\n\nconst READABLE_CONVENTION_FILES = [\n 'index',\n 'acl',\n 'events',\n 'di',\n path.join('data', 'entities'),\n path.join('db', 'entities'),\n]\n\n/**\n * True when the module directory exposes at least one recognised convention file as\n * TypeScript source. This is the auto-discovery boundary that skips `.js`-only\n * installs (standalone `node_modules/@open-mercato/<pkg>/dist/modules`) \u2014 the extractor's\n * ts-morph reader only parses `.ts`/`.tsx`, so a `.js`-only root would yield empty facts.\n */\nexport function hasReadableModuleSource(moduleRoot: string): boolean {\n if (!fs.existsSync(moduleRoot)) return false\n for (const basename of READABLE_CONVENTION_FILES) {\n for (const extension of ['.ts', '.tsx']) {\n if (fs.existsSync(path.join(moduleRoot, `${basename}${extension}`))) return true\n }\n }\n return false\n}\n\nfunction resolveDuplicateModuleIds(\n sources: ModuleFactSource[],\n resolver: PackageResolver,\n): ModuleFactSource[] {\n const sourcesByModule = new Map<string, ModuleFactSource[]>()\n for (const source of sources) {\n const matches = sourcesByModule.get(source.moduleId) ?? []\n matches.push(source)\n sourcesByModule.set(source.moduleId, matches)\n }\n\n const duplicates = [...sourcesByModule.entries()].filter(([, matches]) => matches.length > 1)\n if (duplicates.length === 0) return sources\n\n const selectedProviders = new Map<string, Set<string>>()\n const implicitCoreSelections = new Set<string>()\n for (const entry of resolver.loadEnabledModules()) {\n const providers = selectedProviders.get(entry.id) ?? new Set<string>()\n providers.add(entry.from ?? '@open-mercato/core')\n selectedProviders.set(entry.id, providers)\n if (entry.from === undefined) implicitCoreSelections.add(entry.id)\n }\n\n const selectedSources = new Map<string, ModuleFactSource>()\n for (const [moduleId, matches] of duplicates) {\n const providers = [...new Set(matches.map((source) => source.from ?? '<unknown>'))]\n .sort((left, right) => left.localeCompare(right))\n const configuredProviders = [...(selectedProviders.get(moduleId) ?? [])]\n .sort((left, right) => left.localeCompare(right))\n const selected = configuredProviders.length === 1\n ? matches.filter((source) => source.from === configuredProviders[0])\n : []\n\n if (selected.length !== 1) {\n const configured = configuredProviders.length > 0\n ? implicitCoreSelections.has(moduleId)\n ? '; src/modules.ts omits \"from\", which defaults to @open-mercato/core'\n : `; src/modules.ts selects ${configuredProviders.join(', ')}`\n : '; src/modules.ts does not select a provider'\n throw new Error(\n `[module-facts] duplicate module id \"${moduleId}\" is provided by ${providers.join(', ')}${configured}. `\n + 'Select exactly one matching provider in src/modules.ts.',\n )\n }\n selectedSources.set(moduleId, selected[0])\n }\n\n const emitted = new Set<string>()\n const result: ModuleFactSource[] = []\n for (const source of sources) {\n if (emitted.has(source.moduleId)) continue\n emitted.add(source.moduleId)\n result.push(selectedSources.get(source.moduleId) ?? source)\n }\n return result\n}\n\n/**\n * Package-scan discovery for the create-app build: every package-provided module\n * across `@open-mercato/*` workspace packages (core plus others), never `apps/*`\n * demo modules. Routes through the resolver rather than hardcoded paths.\n */\nexport function discoverPackageModuleSources(resolver: PackageResolver): ModuleFactSource[] {\n const sources: ModuleFactSource[] = []\n for (const pkg of resolver.discoverPackages()) {\n for (const discovered of discoverModulesInPackage(pkg.path)) {\n const moduleRoot = path.join(pkg.modulesPath, discovered.moduleId)\n if (!hasReadableModuleSource(moduleRoot)) continue\n sources.push({\n moduleId: discovered.moduleId,\n moduleRoot,\n from: pkg.name,\n packageVersion: pkg.version ?? null,\n })\n }\n }\n return resolveDuplicateModuleIds(sources, resolver)\n}\n\n/** App-local modules always live under this app-root-relative directory. */\nexport const LOCAL_MODULES_DIRECTORY = path.posix.join('src', 'modules')\n\n/**\n * Locates an app-local module that is projected into the reference bundle rather than the\n * normal package outputs. `appRoot` is the directory containing `src/modules` \u2014 the\n * create-app template root at build time, the generated app root at scaffold and\n * `agentic:init` time \u2014 so the same module yields the same portable `src/modules/<id>`\n * provenance from every root. Returns `null` when the module is absent or is not readable\n * TypeScript source, because a reference bundle built from an unreadable root would claim\n * an empty surface rather than fail.\n */\nexport function discoverLocalReferenceModuleSource(options: {\n appRoot: string\n moduleId: string\n}): ModuleFactSource | null {\n const moduleRoot = path.join(options.appRoot, 'src', 'modules', options.moduleId)\n if (!hasReadableModuleSource(moduleRoot)) return null\n return {\n moduleId: options.moduleId,\n moduleRoot,\n portableSourceRoot: path.posix.join(LOCAL_MODULES_DIRECTORY, options.moduleId),\n sourceKind: 'local-reference',\n }\n}\n\n/**\n * Appends the local reference source to the package batch, rejecting a duplicate module\n * id *before* assignment. A package that already provides the same id would otherwise be\n * silently replaced by (or silently replace) the app-local projection, and the emitted\n * bundle would attribute one module's surfaces to the other's source tree.\n */\nexport function appendLocalReferenceModuleSource(\n packageSources: readonly ModuleFactSource[],\n reference: ModuleFactSource,\n): ModuleFactSource[] {\n const conflict = packageSources.find((source) => source.moduleId === reference.moduleId)\n if (conflict) {\n throw new Error(\n `[module-facts] local reference module \"${reference.moduleId}\" collides with the module provided by `\n + `${conflict.from ?? '<unknown package>'}. Rename the app-local module or remove the package providing it.`,\n )\n }\n return [...packageSources, reference]\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|