@open-mercato/cli 0.10.1-develop.7983.1.fd91207efe → 0.10.1-develop.7994.1.c9f31972aa
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 +1 -1
- package/dist/agentic/guides/module-facts.json +162 -162
- package/dist/agentic/guides/module-facts.v2.json +162 -162
- package/dist/agentic/guides/module-tool.md +21 -0
- package/dist/agentic/guides/modules/agent_orchestrator/index.md +1 -1
- package/dist/agentic/guides/modules/ai_assistant/index.md +1 -1
- package/dist/agentic/guides/modules/api_docs/index.md +1 -1
- package/dist/agentic/guides/modules/api_keys/index.md +1 -1
- package/dist/agentic/guides/modules/attachments/index.md +1 -1
- package/dist/agentic/guides/modules/audit_logs/index.md +1 -1
- package/dist/agentic/guides/modules/auth/index.md +1 -1
- package/dist/agentic/guides/modules/availability/index.md +1 -1
- package/dist/agentic/guides/modules/business_rules/index.md +1 -1
- package/dist/agentic/guides/modules/carrier_inpost/index.md +1 -1
- package/dist/agentic/guides/modules/cart/index.md +1 -1
- package/dist/agentic/guides/modules/catalog/index.md +1 -1
- package/dist/agentic/guides/modules/channel_apns/index.md +1 -1
- package/dist/agentic/guides/modules/channel_discord/index.md +1 -1
- package/dist/agentic/guides/modules/channel_expo/index.md +1 -1
- package/dist/agentic/guides/modules/channel_fcm/index.md +1 -1
- package/dist/agentic/guides/modules/channel_gmail/index.md +1 -1
- package/dist/agentic/guides/modules/channel_imap/index.md +1 -1
- package/dist/agentic/guides/modules/channel_resend/index.md +1 -1
- package/dist/agentic/guides/modules/channel_ses/index.md +1 -1
- package/dist/agentic/guides/modules/channel_smtp/index.md +1 -1
- package/dist/agentic/guides/modules/checkout/index.md +1 -1
- package/dist/agentic/guides/modules/communication_channels/index.md +1 -1
- package/dist/agentic/guides/modules/configs/index.md +1 -1
- package/dist/agentic/guides/modules/content/index.md +1 -1
- package/dist/agentic/guides/modules/currencies/index.md +1 -1
- package/dist/agentic/guides/modules/customer_accounts/index.md +1 -1
- package/dist/agentic/guides/modules/customer_groups/index.md +1 -1
- package/dist/agentic/guides/modules/customers/index.md +1 -1
- package/dist/agentic/guides/modules/dashboards/index.md +1 -1
- package/dist/agentic/guides/modules/data_sync/index.md +1 -1
- package/dist/agentic/guides/modules/design_system/index.md +1 -1
- package/dist/agentic/guides/modules/devices/index.md +1 -1
- package/dist/agentic/guides/modules/dictionaries/index.md +1 -1
- package/dist/agentic/guides/modules/directory/index.md +1 -1
- package/dist/agentic/guides/modules/documents/index.md +1 -1
- package/dist/agentic/guides/modules/ecommerce/index.md +1 -1
- package/dist/agentic/guides/modules/entities/index.md +1 -1
- package/dist/agentic/guides/modules/eudr/index.md +1 -1
- package/dist/agentic/guides/modules/events/index.md +1 -1
- package/dist/agentic/guides/modules/feature_toggles/index.md +1 -1
- package/dist/agentic/guides/modules/forms/index.md +1 -1
- package/dist/agentic/guides/modules/gateway_autopay/index.md +1 -1
- package/dist/agentic/guides/modules/gateway_stripe/index.md +1 -1
- package/dist/agentic/guides/modules/gateway_tpay/index.md +1 -1
- package/dist/agentic/guides/modules/generators/index.md +1 -1
- package/dist/agentic/guides/modules/inbox_ops/index.md +1 -1
- package/dist/agentic/guides/modules/integrations/index.md +1 -1
- package/dist/agentic/guides/modules/messages/index.md +1 -1
- package/dist/agentic/guides/modules/notifications/index.md +1 -1
- package/dist/agentic/guides/modules/onboarding/index.md +1 -1
- package/dist/agentic/guides/modules/payment_gateways/index.md +1 -1
- package/dist/agentic/guides/modules/perspectives/index.md +1 -1
- package/dist/agentic/guides/modules/phone_calls/index.md +1 -1
- package/dist/agentic/guides/modules/planner/index.md +1 -1
- package/dist/agentic/guides/modules/portal/index.md +1 -1
- package/dist/agentic/guides/modules/progress/index.md +1 -1
- package/dist/agentic/guides/modules/promotions/index.md +1 -1
- package/dist/agentic/guides/modules/push_notifications/index.md +1 -1
- package/dist/agentic/guides/modules/query_index/index.md +1 -1
- package/dist/agentic/guides/modules/record_locks/index.md +1 -1
- package/dist/agentic/guides/modules/resources/index.md +1 -1
- package/dist/agentic/guides/modules/sales/index.md +1 -1
- package/dist/agentic/guides/modules/scheduler/index.md +1 -1
- package/dist/agentic/guides/modules/search/index.md +1 -1
- package/dist/agentic/guides/modules/security/index.md +1 -1
- package/dist/agentic/guides/modules/seeds/index.md +1 -1
- package/dist/agentic/guides/modules/shipping_carriers/index.md +1 -1
- package/dist/agentic/guides/modules/sso/index.md +1 -1
- package/dist/agentic/guides/modules/staff/index.md +1 -1
- package/dist/agentic/guides/modules/storage_s3/index.md +1 -1
- package/dist/agentic/guides/modules/sync_akeneo/index.md +1 -1
- package/dist/agentic/guides/modules/sync_excel/index.md +1 -1
- package/dist/agentic/guides/modules/system_status_overlays/index.md +1 -1
- package/dist/agentic/guides/modules/telemetry/index.md +1 -1
- package/dist/agentic/guides/modules/tillio/index.md +1 -1
- package/dist/agentic/guides/modules/translations/index.md +1 -1
- package/dist/agentic/guides/modules/warranty_claims/index.md +1 -1
- package/dist/agentic/guides/modules/webhooks/index.md +1 -1
- package/dist/agentic/guides/modules/wms/index.md +1 -1
- package/dist/agentic/guides/modules/workflows/index.md +1 -1
- package/dist/agentic/guides/reference-module-facts.json +1 -1
- package/dist/agentic/guides/upstream/manifest.json +1 -1
- package/dist/agentic/shared/ai/harness/cases.json +23 -9
- package/dist/agentic/shared/ai/harness/source-link-inventory.json +90 -4
- package/dist/lib/__integration__/TC-INT-007.spec.js +207 -19
- package/dist/lib/__integration__/TC-INT-007.spec.js.map +2 -2
- package/dist/lib/__integration__/TC-INT-009.spec.js +267 -0
- package/dist/lib/__integration__/TC-INT-009.spec.js.map +7 -0
- package/dist/lib/eject.js +25 -9
- package/dist/lib/eject.js.map +2 -2
- package/dist/lib/generators/entity-ids.js +2 -0
- package/dist/lib/generators/entity-ids.js.map +2 -2
- package/dist/lib/generators/module-di.js +2 -0
- package/dist/lib/generators/module-di.js.map +2 -2
- package/dist/lib/generators/module-entities.js +2 -0
- package/dist/lib/generators/module-entities.js.map +2 -2
- package/dist/lib/generators/module-package-sources.js +6 -4
- package/dist/lib/generators/module-package-sources.js.map +2 -2
- package/dist/lib/generators/module-registry.js +32 -86
- package/dist/lib/generators/module-registry.js.map +2 -2
- package/dist/lib/generators/openapi.js +2 -0
- package/dist/lib/generators/openapi.js.map +2 -2
- package/dist/lib/generators/source-exports.js +73 -0
- package/dist/lib/generators/source-exports.js.map +7 -0
- package/dist/lib/init-summary.js +44 -0
- package/dist/lib/init-summary.js.map +7 -0
- package/dist/lib/module-github.js +98 -0
- package/dist/lib/module-github.js.map +7 -0
- package/dist/lib/module-identity.js +131 -0
- package/dist/lib/module-identity.js.map +7 -0
- package/dist/lib/module-inspection.js +124 -0
- package/dist/lib/module-inspection.js.map +7 -0
- package/dist/lib/module-install.js +150 -21
- package/dist/lib/module-install.js.map +3 -3
- package/dist/lib/module-package.js +205 -15
- package/dist/lib/module-package.js.map +2 -2
- package/dist/lib/modules-config.js +69 -30
- package/dist/lib/modules-config.js.map +2 -2
- package/dist/lib/resolver.js +33 -34
- package/dist/lib/resolver.js.map +2 -2
- package/dist/mercato.js +14 -23
- package/dist/mercato.js.map +2 -2
- package/package.json +7 -7
- package/src/__tests__/mercato.test.ts +14 -4
- package/src/lib/__fixtures__/official-module-package/dist/modules/test_package/widgets/injection/test/widget.js +1 -0
- package/src/lib/__integration__/TC-INT-007.spec.ts +219 -19
- package/src/lib/__integration__/TC-INT-009.spec.ts +279 -0
- package/src/lib/__tests__/eject.test.ts +98 -4
- package/src/lib/__tests__/init-summary.test.ts +50 -0
- package/src/lib/__tests__/module-github.test.ts +108 -0
- package/src/lib/__tests__/module-identity.test.ts +144 -0
- package/src/lib/__tests__/module-inspection.test.ts +195 -0
- package/src/lib/__tests__/module-install.test.ts +399 -10
- package/src/lib/__tests__/module-package.test.ts +154 -0
- package/src/lib/__tests__/modules-config.test.ts +55 -0
- package/src/lib/__tests__/resolver.packages.test.ts +29 -0
- package/src/lib/eject.ts +28 -10
- package/src/lib/generators/__tests__/module-id-collisions.test.ts +146 -0
- package/src/lib/generators/__tests__/module-package-sources.test.ts +19 -2
- package/src/lib/generators/__tests__/module-requirements.test.ts +56 -0
- package/src/lib/generators/entity-ids.ts +2 -0
- package/src/lib/generators/module-di.ts +2 -0
- package/src/lib/generators/module-entities.ts +2 -0
- package/src/lib/generators/module-package-sources.ts +7 -5
- package/src/lib/generators/module-registry.ts +33 -115
- package/src/lib/generators/openapi.ts +3 -0
- package/src/lib/generators/source-exports.ts +93 -0
- package/src/lib/init-summary.ts +54 -0
- package/src/lib/module-github.ts +109 -0
- package/src/lib/module-identity.ts +145 -0
- package/src/lib/module-inspection.ts +133 -0
- package/src/lib/module-install.ts +170 -22
- package/src/lib/module-package.ts +243 -16
- package/src/lib/modules-config.ts +80 -32
- package/src/lib/resolver.ts +35 -39
- package/src/mercato.ts +14 -24
- package/src/types/cross-spawn.d.ts +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# security — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/enterprise 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/enterprise 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/enterprise/src/modules/security
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# seeds — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/core/src/modules/seeds
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# shipping_carriers — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/core/src/modules/shipping_carriers
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# sso — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/enterprise 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/enterprise 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/enterprise/src/modules/sso
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# staff — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/core/src/modules/staff
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# storage_s3 — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/storage-s3 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/storage-s3 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/storage-s3/src/modules/storage_s3
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# sync_akeneo — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/sync-akeneo 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/sync-akeneo 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/sync-akeneo/src/modules/sync_akeneo
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# sync_excel — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/core/src/modules/sync_excel
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# system_status_overlays — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/enterprise 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/enterprise 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/enterprise/src/modules/system_status_overlays
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# telemetry — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/telemetry 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/telemetry 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/telemetry/src/modules/telemetry
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# tillio — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/tillio 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/tillio 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/tillio/src/modules/tillio
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# translations — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/core/src/modules/translations
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# warranty_claims — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/core/src/modules/warranty_claims
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# webhooks — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/webhooks 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/webhooks 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/webhooks/src/modules/webhooks
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# wms — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/core/src/modules/wms
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# workflows — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.10.1-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.10.1-develop.7994.1.c9f31972aa; core 0.10.1-develop.7994.1.c9f31972aa — R1 staleness stamp -->
|
|
3
3
|
Source root: node_modules/@open-mercato/core/src/modules/workflows
|
|
4
4
|
|
|
5
5
|
## Sections
|
|
@@ -1185,7 +1185,7 @@
|
|
|
1185
1185
|
"facts": {
|
|
1186
1186
|
"title": "Example Module",
|
|
1187
1187
|
"description": "Demonstrates pages, APIs, entities and DI.",
|
|
1188
|
-
"coreVersion": "0.10.1-develop.
|
|
1188
|
+
"coreVersion": "0.10.1-develop.7994.1.c9f31972aa",
|
|
1189
1189
|
"sourcePackage": null,
|
|
1190
1190
|
"sourceVersion": null,
|
|
1191
1191
|
"sourceRoot": "src/modules/example",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"generator": "@open-mercato/cli@0.10.1-develop.
|
|
3
|
+
"generator": "@open-mercato/cli@0.10.1-develop.7994.1.c9f31972aa",
|
|
4
4
|
"files": {
|
|
5
5
|
"AGENTS.md": "35c948a32e06ca64b4706970c55ec60946412b410938b22478233a2c5c43df56",
|
|
6
6
|
"BACKWARD_COMPATIBILITY.md": "4fd70dbc9acff26540bb6f290996df23831583a48b025623b49761c42dddbc59"
|
|
@@ -21696,13 +21696,15 @@
|
|
|
21696
21696
|
"mode": "analysis",
|
|
21697
21697
|
"evaluationKind": "routing",
|
|
21698
21698
|
"risk": "medium",
|
|
21699
|
-
"prompt": "I am already inside a create-mercato-app Cloud sandbox. Explain the supported npx tool commands to start a new visits module, or package an existing visits module, then publish it to npm and a dedicated GitHub repository. Include a local preview before remote publication and explain how to keep developing in this same app after publication, including the optional repository link and its portability. Distinguish npm login, environment token and trusted publishing requirements. Prepare the workflow only; do not publish or create remote resources.",
|
|
21699
|
+
"prompt": "I am already inside a create-mercato-app Cloud sandbox. Explain the supported npx tool commands to start a new visits module, or package an existing visits module, then publish it to npm and a dedicated GitHub repository. Include a local preview before remote publication and explain how to keep developing in this same app after publication, including the optional repository link and its portability. Distinguish npm login, environment token and trusted publishing requirements. Prepare the workflow only; do not publish or create remote resources. For the receiving app, also explain installing under a dependency alias, rejecting two providers with the same runtime module ID, keeping npm and GitHub source identities distinct, explicitly disabling all consumers before replacing a binding, and preserving local source/provenance when ejecting. Explain resolving old-origin dependants and manual imports and successfully regenerating/building while the old provider remains installed, then replacing the binding and verifying generation/build again. Identify what disabling does not remove.",
|
|
21700
21700
|
"tags": [
|
|
21701
21701
|
"architecture",
|
|
21702
21702
|
"module-package",
|
|
21703
21703
|
"publication",
|
|
21704
21704
|
"source-link",
|
|
21705
|
-
"auth"
|
|
21705
|
+
"auth",
|
|
21706
|
+
"module-installation",
|
|
21707
|
+
"source-identity"
|
|
21706
21708
|
],
|
|
21707
21709
|
"owner": {
|
|
21708
21710
|
"kind": "guide",
|
|
@@ -21722,15 +21724,22 @@
|
|
|
21722
21724
|
"context": {
|
|
21723
21725
|
"required": [
|
|
21724
21726
|
"AGENTS.md",
|
|
21725
|
-
".ai/guides/module-tool.md"
|
|
21727
|
+
".ai/guides/module-tool.md",
|
|
21728
|
+
"node_modules/@open-mercato/cli/src/lib/module-install.ts",
|
|
21729
|
+
"node_modules/@open-mercato/cli/src/lib/module-identity.ts",
|
|
21730
|
+
"node_modules/@open-mercato/cli/src/lib/eject.ts"
|
|
21726
21731
|
],
|
|
21727
21732
|
"allowedExtra": [
|
|
21728
21733
|
".ai/guides/architecture.md"
|
|
21729
21734
|
],
|
|
21730
21735
|
"forbidden": [
|
|
21731
21736
|
".env*",
|
|
21732
|
-
".git/**"
|
|
21733
|
-
|
|
21737
|
+
".git/**"
|
|
21738
|
+
],
|
|
21739
|
+
"sourceReferenceIds": [
|
|
21740
|
+
"guides/module-tool:node_modules/@open-mercato/cli/src/lib/module-install.ts",
|
|
21741
|
+
"guides/module-tool:node_modules/@open-mercato/cli/src/lib/module-identity.ts",
|
|
21742
|
+
"guides/module-tool:node_modules/@open-mercato/cli/src/lib/eject.ts"
|
|
21734
21743
|
]
|
|
21735
21744
|
},
|
|
21736
21745
|
"requiredDecisions": [
|
|
@@ -21739,7 +21748,12 @@
|
|
|
21739
21748
|
"fresh-consumer-third-party",
|
|
21740
21749
|
"app-source-preserved",
|
|
21741
21750
|
"optional-repository-source-link",
|
|
21742
|
-
"npm-auth-mode-boundaries"
|
|
21751
|
+
"npm-auth-mode-boundaries",
|
|
21752
|
+
"module-binding-is-not-runtime-id",
|
|
21753
|
+
"npm-github-origins-distinct",
|
|
21754
|
+
"one-enabled-provider-per-runtime-id",
|
|
21755
|
+
"explicit-provider-replacement",
|
|
21756
|
+
"eject-retains-source-provenance"
|
|
21743
21757
|
],
|
|
21744
21758
|
"forbiddenPatterns": [
|
|
21745
21759
|
"(?:print|display|commit).{0,30}(?:NPM_TOKEN|NODE_AUTH_TOKEN|raw token)",
|
|
@@ -21754,9 +21768,9 @@
|
|
|
21754
21768
|
"context.forbidden",
|
|
21755
21769
|
"patterns.forbidden"
|
|
21756
21770
|
],
|
|
21757
|
-
"maxContextFiles":
|
|
21758
|
-
"maxInitialContextBytes":
|
|
21759
|
-
"maxTotalContextBytes":
|
|
21771
|
+
"maxContextFiles": 6,
|
|
21772
|
+
"maxInitialContextBytes": 73728,
|
|
21773
|
+
"maxTotalContextBytes": 81920,
|
|
21760
21774
|
"relatedCases": [
|
|
21761
21775
|
"OMH-002",
|
|
21762
21776
|
"OMH-046",
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 1,
|
|
3
3
|
"generatedNote": "Derived asset — the app-facing projection of the repository source-link inventory, regenerated with `yarn workspace create-mercato-app harness:generate-source-link-inventory`. Never hand-edit. Harness cases resolve `context.sourceReferenceIds` against `referenceId` here; a record with `readStatus: \"qa-only\"` is validation evidence only and is refused as a case reference.",
|
|
4
4
|
"derived": {
|
|
5
|
-
"ownerCount":
|
|
6
|
-
"recordCount":
|
|
7
|
-
"sourceRequiredCount":
|
|
8
|
-
"readableCount":
|
|
5
|
+
"ownerCount": 33,
|
|
6
|
+
"recordCount": 159,
|
|
7
|
+
"sourceRequiredCount": 133,
|
|
8
|
+
"readableCount": 159,
|
|
9
9
|
"baselineSha": "f7c941570003f3abe920b1765995cbef98dcad0b"
|
|
10
10
|
},
|
|
11
11
|
"notCovered": [
|
|
@@ -615,6 +615,81 @@
|
|
|
615
615
|
"migration"
|
|
616
616
|
]
|
|
617
617
|
},
|
|
618
|
+
{
|
|
619
|
+
"referenceId": "guides/module-tool:node_modules/@open-mercato/cli/src/lib/eject.ts",
|
|
620
|
+
"requirement": "source-required",
|
|
621
|
+
"originAsset": ".ai/guides/module-tool.md",
|
|
622
|
+
"heading": "Receiving app: installation, aliases, and replacement",
|
|
623
|
+
"href": "../../node_modules/@open-mercato/cli/src/lib/eject.ts",
|
|
624
|
+
"targetKind": "installed-package",
|
|
625
|
+
"readStatus": "readable",
|
|
626
|
+
"resolvedPath": "node_modules/@open-mercato/cli/src/lib/eject.ts",
|
|
627
|
+
"moduleId": null,
|
|
628
|
+
"capabilityIds": [],
|
|
629
|
+
"packageName": "@open-mercato/cli",
|
|
630
|
+
"packageRelativePath": "src/lib/eject.ts",
|
|
631
|
+
"presets": [
|
|
632
|
+
"classic",
|
|
633
|
+
"crm",
|
|
634
|
+
"empty",
|
|
635
|
+
"wms"
|
|
636
|
+
],
|
|
637
|
+
"tiers": [
|
|
638
|
+
"automation",
|
|
639
|
+
"core",
|
|
640
|
+
"migration"
|
|
641
|
+
]
|
|
642
|
+
},
|
|
643
|
+
{
|
|
644
|
+
"referenceId": "guides/module-tool:node_modules/@open-mercato/cli/src/lib/module-identity.ts",
|
|
645
|
+
"requirement": "source-required",
|
|
646
|
+
"originAsset": ".ai/guides/module-tool.md",
|
|
647
|
+
"heading": "Receiving app: installation, aliases, and replacement",
|
|
648
|
+
"href": "../../node_modules/@open-mercato/cli/src/lib/module-identity.ts",
|
|
649
|
+
"targetKind": "installed-package",
|
|
650
|
+
"readStatus": "readable",
|
|
651
|
+
"resolvedPath": "node_modules/@open-mercato/cli/src/lib/module-identity.ts",
|
|
652
|
+
"moduleId": null,
|
|
653
|
+
"capabilityIds": [],
|
|
654
|
+
"packageName": "@open-mercato/cli",
|
|
655
|
+
"packageRelativePath": "src/lib/module-identity.ts",
|
|
656
|
+
"presets": [
|
|
657
|
+
"classic",
|
|
658
|
+
"crm",
|
|
659
|
+
"empty",
|
|
660
|
+
"wms"
|
|
661
|
+
],
|
|
662
|
+
"tiers": [
|
|
663
|
+
"automation",
|
|
664
|
+
"core",
|
|
665
|
+
"migration"
|
|
666
|
+
]
|
|
667
|
+
},
|
|
668
|
+
{
|
|
669
|
+
"referenceId": "guides/module-tool:node_modules/@open-mercato/cli/src/lib/module-install.ts",
|
|
670
|
+
"requirement": "source-required",
|
|
671
|
+
"originAsset": ".ai/guides/module-tool.md",
|
|
672
|
+
"heading": "Receiving app: installation, aliases, and replacement",
|
|
673
|
+
"href": "../../node_modules/@open-mercato/cli/src/lib/module-install.ts",
|
|
674
|
+
"targetKind": "installed-package",
|
|
675
|
+
"readStatus": "readable",
|
|
676
|
+
"resolvedPath": "node_modules/@open-mercato/cli/src/lib/module-install.ts",
|
|
677
|
+
"moduleId": null,
|
|
678
|
+
"capabilityIds": [],
|
|
679
|
+
"packageName": "@open-mercato/cli",
|
|
680
|
+
"packageRelativePath": "src/lib/module-install.ts",
|
|
681
|
+
"presets": [
|
|
682
|
+
"classic",
|
|
683
|
+
"crm",
|
|
684
|
+
"empty",
|
|
685
|
+
"wms"
|
|
686
|
+
],
|
|
687
|
+
"tiers": [
|
|
688
|
+
"automation",
|
|
689
|
+
"core",
|
|
690
|
+
"migration"
|
|
691
|
+
]
|
|
692
|
+
},
|
|
618
693
|
{
|
|
619
694
|
"referenceId": "om-backend-ui-design/crud-surfaces:README.md",
|
|
620
695
|
"requirement": "source-required",
|
|
@@ -3913,6 +3988,17 @@
|
|
|
3913
3988
|
"core"
|
|
3914
3989
|
]
|
|
3915
3990
|
},
|
|
3991
|
+
{
|
|
3992
|
+
"referenceId": "rule:guides/module-tool#file-artifact-unknown-origin",
|
|
3993
|
+
"requirement": "retained-normative-snippet",
|
|
3994
|
+
"originAsset": ".ai/guides/module-tool.md",
|
|
3995
|
+
"heading": null,
|
|
3996
|
+
"targetKind": "local-owner",
|
|
3997
|
+
"readStatus": "readable",
|
|
3998
|
+
"resolvedPath": ".ai/guides/module-tool.md",
|
|
3999
|
+
"moduleId": null,
|
|
4000
|
+
"capabilityIds": []
|
|
4001
|
+
},
|
|
3916
4002
|
{
|
|
3917
4003
|
"referenceId": "rule:guides/testing-debugging#generated-output-is-not-a-patch-target",
|
|
3918
4004
|
"requirement": "retained-normative-snippet",
|
|
@@ -19,21 +19,34 @@ const fixtureModulePackage = path.join(
|
|
|
19
19
|
function yarnBinary() {
|
|
20
20
|
return process.platform === "win32" ? "yarn.cmd" : "yarn";
|
|
21
21
|
}
|
|
22
|
-
function runCommand(command, args, cwd) {
|
|
22
|
+
function runCommand(command, args, cwd, environment = {}) {
|
|
23
23
|
const yarnCacheFolder = path.join(cwd, ".yarn", "cache");
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
24
|
+
try {
|
|
25
|
+
return execFileSync(command, args, {
|
|
26
|
+
cwd,
|
|
27
|
+
encoding: "utf8",
|
|
28
|
+
env: {
|
|
29
|
+
...process.env,
|
|
30
|
+
FORCE_COLOR: "0",
|
|
31
|
+
NODE_NO_WARNINGS: "1",
|
|
32
|
+
YARN_CACHE_FOLDER: yarnCacheFolder,
|
|
33
|
+
YARN_ENABLE_GLOBAL_CACHE: "0",
|
|
34
|
+
YARN_ENABLE_IMMUTABLE_INSTALLS: "0",
|
|
35
|
+
YARN_NODE_LINKER: "node-modules",
|
|
36
|
+
...environment
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
} catch (error) {
|
|
40
|
+
if (!error || typeof error !== "object") throw error;
|
|
41
|
+
const errorRecord = error;
|
|
42
|
+
const outputs = ["stdout", "stderr"].flatMap((streamName) => {
|
|
43
|
+
const output = errorRecord[streamName];
|
|
44
|
+
return typeof output === "string" || Buffer.isBuffer(output) ? [output.toString().trim()] : [];
|
|
45
|
+
}).filter(Boolean);
|
|
46
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
47
|
+
throw new Error(outputs.length > 0 ? `${message}
|
|
48
|
+
${outputs.join("\n")}` : message);
|
|
49
|
+
}
|
|
37
50
|
}
|
|
38
51
|
function runMercato(args, cwd) {
|
|
39
52
|
return runCommand(process.execPath, [cliBin, ...args], cwd);
|
|
@@ -69,6 +82,7 @@ const commentedModulesSource = [
|
|
|
69
82
|
""
|
|
70
83
|
].join("\n");
|
|
71
84
|
function createMonorepoFixture(rootDir) {
|
|
85
|
+
writeFile(path.join(rootDir, "yarn.lock"), "");
|
|
72
86
|
writeFile(
|
|
73
87
|
path.join(rootDir, "package.json"),
|
|
74
88
|
JSON.stringify(
|
|
@@ -103,6 +117,7 @@ function createMonorepoFixture(rootDir) {
|
|
|
103
117
|
return appDir;
|
|
104
118
|
}
|
|
105
119
|
function createStandaloneFixture(rootDir) {
|
|
120
|
+
writeFile(path.join(rootDir, "yarn.lock"), "");
|
|
106
121
|
writeFile(
|
|
107
122
|
path.join(rootDir, ".yarnrc.yml"),
|
|
108
123
|
["nodeLinker: node-modules", "enableGlobalCache: false", "cacheFolder: ./.yarn/cache", ""].join("\n")
|
|
@@ -173,13 +188,182 @@ test.describe("TC-INT-007: CLI official module install and eject flows", () => {
|
|
|
173
188
|
);
|
|
174
189
|
const modulesSource = readFile(path.join(appDir, "src", "modules.ts"));
|
|
175
190
|
const cssSource = readFile(path.join(appDir, ".mercato", "generated", "module-package-sources.css"));
|
|
176
|
-
expect(modulesSource).
|
|
191
|
+
expect(modulesSource).toMatch(/id: 'test_package', from: '@app'/);
|
|
192
|
+
expect(modulesSource).not.toContain("locator:");
|
|
193
|
+
expect(modulesSource).toContain("packageName: '@open-mercato/test-package'");
|
|
177
194
|
expect(fs.existsSync(path.join(appDir, "src", "modules", "test_package", "index.ts"))).toBe(true);
|
|
195
|
+
expect(readFile(path.join(appDir, "src", "modules", "test_package", "index.ts"))).toBe(readFile(path.join(fixtureModulePackage, "src", "modules", "test_package", "index.ts")));
|
|
178
196
|
expect(cssSource).toBe("");
|
|
179
197
|
} finally {
|
|
180
198
|
fs.rmSync(appDir, { recursive: true, force: true });
|
|
181
199
|
}
|
|
182
200
|
});
|
|
201
|
+
test("module add reports dependencies that must be enabled before registration", () => {
|
|
202
|
+
const appDir = fs.mkdtempSync(path.join(os.tmpdir(), "mercato-cli-standalone-dependencies-"));
|
|
203
|
+
try {
|
|
204
|
+
createStandaloneFixture(appDir);
|
|
205
|
+
const packageDir = path.join(appDir, "fixture-module-package");
|
|
206
|
+
fs.cpSync(fixtureModulePackage, packageDir, { recursive: true });
|
|
207
|
+
writeFile(
|
|
208
|
+
path.join(packageDir, "src", "modules", "test_package", "index.ts"),
|
|
209
|
+
"export const metadata = { id: 'test_package', requires: ['customers'], ejectable: true }\n"
|
|
210
|
+
);
|
|
211
|
+
runCommand(yarnBinary(), ["install"], appDir);
|
|
212
|
+
expect(() => runMercato(
|
|
213
|
+
["module", "add", "@open-mercato/test-package@file:./fixture-module-package"],
|
|
214
|
+
appDir
|
|
215
|
+
)).toThrow(/requires module\(s\) that are not enabled: customers/);
|
|
216
|
+
expect(readFile(path.join(appDir, "src", "modules.ts"))).toBe("export const enabledModules = []\n");
|
|
217
|
+
} finally {
|
|
218
|
+
fs.rmSync(appDir, { recursive: true, force: true });
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
test("module add resolves canonical requirements from retained ejected origins", () => {
|
|
222
|
+
const appDir = fs.mkdtempSync(path.join(os.tmpdir(), "mercato-cli-canonical-requires-"));
|
|
223
|
+
try {
|
|
224
|
+
createStandaloneFixture(appDir);
|
|
225
|
+
const packageDir = path.join(appDir, "fixture-module-package");
|
|
226
|
+
fs.cpSync(fixtureModulePackage, packageDir, { recursive: true });
|
|
227
|
+
const requirements = [
|
|
228
|
+
"@pkarw/marketing_consents@preview",
|
|
229
|
+
"npm:@pkarw/marketing_consents@1.0.0",
|
|
230
|
+
"github:pkarw/marketing-consents",
|
|
231
|
+
"npm:consent-helper@next",
|
|
232
|
+
"github:pkarw/consent-tools#main",
|
|
233
|
+
"pkarw/consent-tools",
|
|
234
|
+
"https://github.com/pkarw/consent-tools.git#release",
|
|
235
|
+
"ssh://git@github.com/pkarw/consent-tools.git#main",
|
|
236
|
+
"git@github.com:pkarw/consent-tools.git",
|
|
237
|
+
"github:pkarw/installed-tools",
|
|
238
|
+
"npm:@open-mercato/core@preview"
|
|
239
|
+
];
|
|
240
|
+
writeFile(
|
|
241
|
+
path.join(packageDir, "src", "modules", "test_package", "index.ts"),
|
|
242
|
+
`export const metadata = { id: 'test_package', requires: ${JSON.stringify(requirements)}, ejectable: true }
|
|
243
|
+
`
|
|
244
|
+
);
|
|
245
|
+
const entries = [
|
|
246
|
+
{ id: "marketing_consents", from: "@app", locator: "github:pkarw/marketing-consents", packageName: "@pkarw/marketing_consents" },
|
|
247
|
+
{ id: "npm_consents", from: "@app", locator: "npm:@pkarw/marketing_consents", packageName: "@pkarw/marketing_consents" },
|
|
248
|
+
{ id: "npm_core", from: "@app", locator: "npm:@open-mercato/core", packageName: "@open-mercato/core" },
|
|
249
|
+
{ id: "consent_helper", from: "@app", locator: "npm:consent-helper" },
|
|
250
|
+
{ id: "consent_tools", from: "@app", locator: "github:pkarw/consent-tools" }
|
|
251
|
+
];
|
|
252
|
+
for (const entry of entries) {
|
|
253
|
+
writeFile(
|
|
254
|
+
path.join(appDir, "src", "modules", entry.id, "index.ts"),
|
|
255
|
+
`export const metadata = { id: '${entry.id}' }
|
|
256
|
+
`
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
const corePackageDir = path.join(appDir, "vendor", "core");
|
|
260
|
+
writeFile(
|
|
261
|
+
path.join(corePackageDir, "package.json"),
|
|
262
|
+
JSON.stringify({ name: "@open-mercato/core", version: "0.4.7", type: "module", repository: { type: "git", url: "https://github.com/pkarw/installed-tools.git" } })
|
|
263
|
+
);
|
|
264
|
+
writeFile(
|
|
265
|
+
path.join(corePackageDir, "src", "modules", "repository_tools", "index.ts"),
|
|
266
|
+
"export const metadata = { id: 'repository_tools' }\n"
|
|
267
|
+
);
|
|
268
|
+
writeFile(
|
|
269
|
+
path.join(corePackageDir, "dist", "modules", "repository_tools", "index.js"),
|
|
270
|
+
"export const metadata = { id: 'repository_tools' }\n"
|
|
271
|
+
);
|
|
272
|
+
const enabledEntries = [...entries, { id: "repository_tools", from: "@open-mercato/core", locator: "github:pkarw/installed-tools" }];
|
|
273
|
+
writeFile(path.join(appDir, "src", "modules.ts"), `export const enabledModules = ${JSON.stringify(enabledEntries)}
|
|
274
|
+
`);
|
|
275
|
+
runCommand(yarnBinary(), ["install"], appDir);
|
|
276
|
+
runMercato(["module", "add", "npm:@open-mercato/test-package@file:./fixture-module-package"], appDir);
|
|
277
|
+
expect(readFile(path.join(appDir, "src", "modules.ts"))).toContain("id: 'test_package'");
|
|
278
|
+
} finally {
|
|
279
|
+
fs.rmSync(appDir, { recursive: true, force: true });
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
test("same-name modules from different origins do not satisfy canonical requirements", () => {
|
|
283
|
+
const appDir = fs.mkdtempSync(path.join(os.tmpdir(), "mercato-cli-wrong-origin-"));
|
|
284
|
+
try {
|
|
285
|
+
createStandaloneFixture(appDir);
|
|
286
|
+
const packageDir = path.join(appDir, "fixture-module-package");
|
|
287
|
+
fs.cpSync(fixtureModulePackage, packageDir, { recursive: true });
|
|
288
|
+
writeFile(
|
|
289
|
+
path.join(packageDir, "src", "modules", "test_package", "index.ts"),
|
|
290
|
+
"export const metadata = { id: 'test_package', requires: ['@pkarw/marketing_consents', 'github:pkarw/consent-tools'], ejectable: true }\n"
|
|
291
|
+
);
|
|
292
|
+
const modulesSource = `export const enabledModules = [
|
|
293
|
+
{ id: 'marketing_consents', from: '@app', locator: 'npm:@open-mercato/marketing_consents' },
|
|
294
|
+
{ id: 'consent_tools', from: '@app', locator: 'github:another-owner/consent-tools' },
|
|
295
|
+
]
|
|
296
|
+
`;
|
|
297
|
+
writeFile(path.join(appDir, "src", "modules.ts"), modulesSource);
|
|
298
|
+
runCommand(yarnBinary(), ["install"], appDir);
|
|
299
|
+
expect(() => runMercato(
|
|
300
|
+
["module", "add", "@open-mercato/test-package@file:./fixture-module-package", "--eject"],
|
|
301
|
+
appDir
|
|
302
|
+
)).toThrow(/@pkarw\/marketing_consents[\s\S]*github:pkarw\/consent-tools[\s\S]*npx create-mercato-module install/);
|
|
303
|
+
expect(readFile(path.join(appDir, "src", "modules.ts"))).toBe(modulesSource);
|
|
304
|
+
expect(fs.existsSync(path.join(appDir, "src", "modules", "test_package"))).toBe(false);
|
|
305
|
+
} finally {
|
|
306
|
+
fs.rmSync(appDir, { recursive: true, force: true });
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
test("module add rejects a same-ID source collision before ejecting", () => {
|
|
310
|
+
const appDir = fs.mkdtempSync(path.join(os.tmpdir(), "mercato-cli-module-collision-"));
|
|
311
|
+
try {
|
|
312
|
+
createStandaloneFixture(appDir);
|
|
313
|
+
const modulesSource = "export const enabledModules = [{ id: 'test_package', from: '@app', locator: 'github:another-owner/test-package' }]\n";
|
|
314
|
+
const localSource = "export const metadata = { id: 'test_package', locator: 'github:another-owner/test-package' }\n";
|
|
315
|
+
writeFile(path.join(appDir, "src", "modules.ts"), modulesSource);
|
|
316
|
+
writeFile(path.join(appDir, "src", "modules", "test_package", "index.ts"), localSource);
|
|
317
|
+
runCommand(yarnBinary(), ["install"], appDir);
|
|
318
|
+
expect(() => runMercato(
|
|
319
|
+
["module", "add", `@open-mercato/test-package@file:${fixtureModulePackage}`, "--eject"],
|
|
320
|
+
appDir
|
|
321
|
+
)).toThrow(/(?=[\s\S]*test_package)(?=[\s\S]*(?:collision|already|conflict))(?=[\s\S]*another-owner)(?=[\s\S]*@open-mercato\/test-package)/i);
|
|
322
|
+
expect(readFile(path.join(appDir, "src", "modules.ts"))).toBe(modulesSource);
|
|
323
|
+
expect(readFile(path.join(appDir, "src", "modules", "test_package", "index.ts"))).toBe(localSource);
|
|
324
|
+
} finally {
|
|
325
|
+
fs.rmSync(appDir, { recursive: true, force: true });
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
test("GitHub locators detect a runtime ID collision before invoking Yarn", () => {
|
|
329
|
+
const appDir = fs.mkdtempSync(path.join(os.tmpdir(), "mercato-cli-github-collision-"));
|
|
330
|
+
try {
|
|
331
|
+
createStandaloneFixture(appDir);
|
|
332
|
+
const modulesSource = "export const enabledModules = [{ id: 'test_package', from: '@app', locator: 'github:other/test-package' }]\n";
|
|
333
|
+
writeFile(path.join(appDir, "src", "modules.ts"), modulesSource);
|
|
334
|
+
const originalManifest = readFile(path.join(appDir, "package.json"));
|
|
335
|
+
const executableDir = path.join(appDir, "bin");
|
|
336
|
+
const packageManifest = Buffer.from(JSON.stringify({ name: "@pkarw/test-package" })).toString("base64");
|
|
337
|
+
const ghPath = path.join(executableDir, "gh");
|
|
338
|
+
writeFile(ghPath, `#!/usr/bin/env node
|
|
339
|
+
const endpoint = process.argv[3]
|
|
340
|
+
const sha = 'a'.repeat(40)
|
|
341
|
+
const value = endpoint === 'user' ? { login: 'pkarw' }
|
|
342
|
+
: endpoint.includes('/commits/') ? { sha }
|
|
343
|
+
: endpoint.includes('/contents/') ? { encoding: 'base64', content: ${JSON.stringify(packageManifest)} }
|
|
344
|
+
: endpoint.includes('/git/trees/') ? { tree: [{ path: 'src/modules/test_package/index.ts' }] }
|
|
345
|
+
: { default_branch: 'main' }
|
|
346
|
+
process.stdout.write(JSON.stringify(value))
|
|
347
|
+
`);
|
|
348
|
+
const yarnPath = path.join(executableDir, "yarn");
|
|
349
|
+
const marker = path.join(appDir, "yarn-invoked");
|
|
350
|
+
writeFile(yarnPath, "#!/usr/bin/env node\nrequire('node:fs').writeFileSync(process.env.COLLISION_YARN_MARKER, 'invoked')\nprocess.exit(1)\n");
|
|
351
|
+
fs.chmodSync(ghPath, 493);
|
|
352
|
+
fs.chmodSync(yarnPath, 493);
|
|
353
|
+
for (const locator of ["github:pkarw/test-package", "https://github.com/pkarw/test-package.git", "git@github.com:pkarw/test-package.git", "github:test-package"]) {
|
|
354
|
+
expect(() => runCommand(process.execPath, [cliBin, "module", "add", locator, "--allow-third-party"], appDir, {
|
|
355
|
+
PATH: executableDir + path.delimiter + process.env.PATH,
|
|
356
|
+
COLLISION_YARN_MARKER: marker
|
|
357
|
+
})).toThrow(/Module name collision[\s\S]*test_package[\s\S]*github:other\/test-package[\s\S]*github:pkarw\/test-package/);
|
|
358
|
+
}
|
|
359
|
+
expect(fs.existsSync(marker)).toBe(false);
|
|
360
|
+
expect(readFile(path.join(appDir, "package.json"))).toBe(originalManifest);
|
|
361
|
+
expect(readFile(path.join(appDir, "src", "modules.ts"))).toBe(modulesSource);
|
|
362
|
+
expect(fs.existsSync(path.join(appDir, "src", "modules", "test_package"))).toBe(false);
|
|
363
|
+
} finally {
|
|
364
|
+
fs.rmSync(appDir, { recursive: true, force: true });
|
|
365
|
+
}
|
|
366
|
+
});
|
|
183
367
|
test("module enable supports package-backed and ejected flows plus both eject entrypoints", () => {
|
|
184
368
|
const appDir = fs.mkdtempSync(path.join(os.tmpdir(), "mercato-cli-standalone-eject-"));
|
|
185
369
|
try {
|
|
@@ -192,22 +376,26 @@ test.describe("TC-INT-007: CLI official module install and eject flows", () => {
|
|
|
192
376
|
);
|
|
193
377
|
runMercato(["module", "enable", "@open-mercato/test-package"], appDir);
|
|
194
378
|
expect(readFile(path.join(appDir, "src", "modules.ts"))).toContain(
|
|
195
|
-
"
|
|
379
|
+
"id: 'test_package', from: '@open-mercato/test-package'"
|
|
196
380
|
);
|
|
197
381
|
writeFile(path.join(appDir, "src", "modules.ts"), "export const enabledModules = []\n");
|
|
198
382
|
fs.rmSync(path.join(appDir, "src", "modules", "test_package"), { recursive: true, force: true });
|
|
199
383
|
runMercato(["module", "enable", "@open-mercato/test-package", "--eject"], appDir);
|
|
200
|
-
expect(readFile(path.join(appDir, "src", "modules.ts"))).toContain("
|
|
384
|
+
expect(readFile(path.join(appDir, "src", "modules.ts"))).toContain("id: 'test_package', from: '@app'");
|
|
201
385
|
expect(fs.existsSync(path.join(appDir, "src", "modules", "test_package", "index.ts"))).toBe(true);
|
|
202
386
|
expect(readFile(path.join(appDir, ".mercato", "generated", "module-package-sources.css"))).toBe("");
|
|
203
387
|
writeFile(path.join(appDir, "src", "modules.ts"), "export const enabledModules = [{ id: 'test_package', from: '@open-mercato/test-package' }]\n");
|
|
204
388
|
fs.rmSync(path.join(appDir, "src", "modules", "test_package"), { recursive: true, force: true });
|
|
205
389
|
runMercato(["module", "eject", "test_package"], appDir);
|
|
206
|
-
expect(readFile(path.join(appDir, "src", "modules.ts"))).toContain("
|
|
390
|
+
expect(readFile(path.join(appDir, "src", "modules.ts"))).toContain("packageName: '@open-mercato/test-package'");
|
|
391
|
+
expect(readFile(path.join(appDir, "src", "modules.ts"))).not.toContain("locator: 'npm:@open-mercato/test-package'");
|
|
392
|
+
expect(readFile(path.join(appDir, "src", "modules.ts"))).toContain("id: 'test_package', from: '@app'");
|
|
207
393
|
writeFile(path.join(appDir, "src", "modules.ts"), "export const enabledModules = [{ id: 'test_package', from: '@open-mercato/test-package' }]\n");
|
|
208
394
|
fs.rmSync(path.join(appDir, "src", "modules", "test_package"), { recursive: true, force: true });
|
|
209
395
|
runMercato(["eject", "test_package"], appDir);
|
|
210
|
-
expect(readFile(path.join(appDir, "src", "modules.ts"))).toContain("
|
|
396
|
+
expect(readFile(path.join(appDir, "src", "modules.ts"))).toContain("packageName: '@open-mercato/test-package'");
|
|
397
|
+
expect(readFile(path.join(appDir, "src", "modules.ts"))).not.toContain("locator: 'npm:@open-mercato/test-package'");
|
|
398
|
+
expect(readFile(path.join(appDir, "src", "modules.ts"))).toContain("id: 'test_package', from: '@app'");
|
|
211
399
|
} finally {
|
|
212
400
|
fs.rmSync(appDir, { recursive: true, force: true });
|
|
213
401
|
}
|