@open-mercato/cli 0.6.7-develop.6686.1.bdda5ed397 → 0.6.7-develop.6688.1.4426ef7fa7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agentic/guides/module-facts.json +108 -108
- package/dist/agentic/guides/modules/ai_assistant.md +1 -1
- package/dist/agentic/guides/modules/api_docs.md +1 -1
- package/dist/agentic/guides/modules/api_keys.md +1 -1
- package/dist/agentic/guides/modules/attachments.md +1 -1
- package/dist/agentic/guides/modules/audit_logs.md +1 -1
- package/dist/agentic/guides/modules/auth.md +1 -1
- package/dist/agentic/guides/modules/business_rules.md +1 -1
- package/dist/agentic/guides/modules/catalog.md +1 -1
- package/dist/agentic/guides/modules/channel_gmail.md +1 -1
- package/dist/agentic/guides/modules/channel_imap.md +1 -1
- package/dist/agentic/guides/modules/checkout.md +1 -1
- package/dist/agentic/guides/modules/communication_channels.md +1 -1
- package/dist/agentic/guides/modules/configs.md +1 -1
- package/dist/agentic/guides/modules/content.md +1 -1
- package/dist/agentic/guides/modules/currencies.md +1 -1
- package/dist/agentic/guides/modules/customer_accounts.md +1 -1
- package/dist/agentic/guides/modules/customers.md +1 -1
- package/dist/agentic/guides/modules/dashboards.md +1 -1
- package/dist/agentic/guides/modules/data_sync.md +1 -1
- package/dist/agentic/guides/modules/dictionaries.md +1 -1
- package/dist/agentic/guides/modules/directory.md +1 -1
- package/dist/agentic/guides/modules/entities.md +1 -1
- package/dist/agentic/guides/modules/events.md +1 -1
- package/dist/agentic/guides/modules/feature_toggles.md +1 -1
- package/dist/agentic/guides/modules/gateway_stripe.md +1 -1
- package/dist/agentic/guides/modules/generators.md +1 -1
- package/dist/agentic/guides/modules/inbox_ops.md +1 -1
- package/dist/agentic/guides/modules/integrations.md +1 -1
- package/dist/agentic/guides/modules/messages.md +1 -1
- package/dist/agentic/guides/modules/notifications.md +1 -1
- package/dist/agentic/guides/modules/onboarding.md +1 -1
- package/dist/agentic/guides/modules/payment_gateways.md +1 -1
- package/dist/agentic/guides/modules/perspectives.md +1 -1
- package/dist/agentic/guides/modules/planner.md +1 -1
- package/dist/agentic/guides/modules/portal.md +1 -1
- package/dist/agentic/guides/modules/progress.md +1 -1
- package/dist/agentic/guides/modules/query_index.md +1 -1
- package/dist/agentic/guides/modules/record_locks.md +1 -1
- package/dist/agentic/guides/modules/resources.md +1 -1
- package/dist/agentic/guides/modules/sales.md +1 -1
- package/dist/agentic/guides/modules/scheduler.md +1 -1
- package/dist/agentic/guides/modules/search.md +1 -1
- package/dist/agentic/guides/modules/security.md +1 -1
- package/dist/agentic/guides/modules/shipping_carriers.md +1 -1
- package/dist/agentic/guides/modules/sso.md +1 -1
- package/dist/agentic/guides/modules/staff.md +1 -1
- package/dist/agentic/guides/modules/storage_s3.md +1 -1
- package/dist/agentic/guides/modules/sync_akeneo.md +1 -1
- package/dist/agentic/guides/modules/sync_excel.md +1 -1
- package/dist/agentic/guides/modules/system_status_overlays.md +1 -1
- package/dist/agentic/guides/modules/translations.md +1 -1
- package/dist/agentic/guides/modules/webhooks.md +1 -1
- package/dist/agentic/guides/modules/wms.md +1 -1
- package/dist/agentic/guides/modules/workflows.md +1 -1
- package/dist/agentic/guides/upstream/manifest.json +1 -1
- package/dist/lib/generators/extensions/injection-widgets.js +20 -0
- package/dist/lib/generators/extensions/injection-widgets.js.map +2 -2
- package/package.json +5 -5
- package/src/lib/__tests__/injection-widget-id-validation.test.ts +184 -0
- package/src/lib/generators/extensions/injection-widgets.ts +51 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# api_keys — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# attachments — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# audit_logs — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# auth — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# business_rules — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# catalog — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# channel_gmail — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/channel-gmail 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/channel-gmail 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# channel_imap — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/channel-imap 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/channel-imap 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# checkout — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/checkout 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/checkout 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# communication_channels — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# configs — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# content — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/content 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/content 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# currencies — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# customer_accounts — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# customers — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# dashboards — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# data_sync — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# dictionaries — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# directory — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# entities — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# events — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/events 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/events 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# feature_toggles — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# gateway_stripe — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/gateway-stripe 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/gateway-stripe 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# generators — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/shared 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/shared 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# inbox_ops — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# integrations — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# messages — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# notifications — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# onboarding — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/onboarding 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/onboarding 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# payment_gateways — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# perspectives — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# planner — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# portal — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# progress — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# query_index — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# record_locks — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/enterprise 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/enterprise 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# resources — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# sales — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# scheduler — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/scheduler 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/scheduler 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# search — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/search 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/search 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# security — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/enterprise 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/enterprise 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# shipping_carriers — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# sso — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/enterprise 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/enterprise 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# staff — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# storage_s3 — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/storage-s3 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/storage-s3 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# sync_akeneo — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/sync-akeneo 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/sync-akeneo 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# sync_excel — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# system_status_overlays — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/enterprise 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/enterprise 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# translations — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# webhooks — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/webhooks 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/webhooks 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# wms — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# workflows — module facts (generated, do not edit)
|
|
2
|
-
<!-- generated from @open-mercato/core 0.6.7-develop.
|
|
2
|
+
<!-- generated from @open-mercato/core 0.6.7-develop.6688.1.4426ef7fa7; core 0.6.7-develop.6688.1.4426ef7fa7 — R1 staleness stamp -->
|
|
3
3
|
|
|
4
4
|
## Entities
|
|
5
5
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"generator": "@open-mercato/cli@0.6.7-develop.
|
|
3
|
+
"generator": "@open-mercato/cli@0.6.7-develop.6688.1.4426ef7fa7",
|
|
4
4
|
"files": {
|
|
5
5
|
"AGENTS.md": "7dd1e874d8abf251d891b0341d8e05fb5bb7724f2fbfb2b3aaa36d23b8188e28",
|
|
6
6
|
"BACKWARD_COMPATIBILITY.md": "354d1466ed504bc87cfbbbc70d60f6646109fe7a946c27f6b0028959adddf138"
|
|
@@ -140,9 +140,23 @@ function resolveScannedWidgetPath(roots, fromApp, relPath) {
|
|
|
140
140
|
const base = fromApp ? roots.appBase : resolveStandaloneSourceMirrorBase(roots.pkgBase) ?? roots.pkgBase;
|
|
141
141
|
return path.join(base, "widgets", "injection", ...relPath.split("/"));
|
|
142
142
|
}
|
|
143
|
+
function reportUnresolvableWidgetReferences(widgetEntries, tableWidgetRefs) {
|
|
144
|
+
const declaredIds = /* @__PURE__ */ new Set();
|
|
145
|
+
for (const entry of widgetEntries.values()) {
|
|
146
|
+
if (entry.widgetId) declaredIds.add(entry.widgetId);
|
|
147
|
+
}
|
|
148
|
+
for (const [widgetId, modules] of Array.from(tableWidgetRefs.entries()).sort(([a], [b]) => a.localeCompare(b))) {
|
|
149
|
+
if (declaredIds.has(widgetId)) continue;
|
|
150
|
+
const owners = Array.from(modules).sort((left, right) => left.localeCompare(right)).join(", ");
|
|
151
|
+
console.warn(
|
|
152
|
+
`[generate] \u26A0 Injection table in "${owners}" references widget id "${widgetId}", but no scanned widget declares it \u2014 that spot will render nothing. Check the id against the widget's metadata.id, and that the widget lives in a file the scanner reads (widgets/injection/**/widget.ts|tsx \u2014 note that widget.client.tsx alone is not scanned).`
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
143
156
|
function createInjectionWidgetsExtension() {
|
|
144
157
|
const widgetEntries = /* @__PURE__ */ new Map();
|
|
145
158
|
const tableEntries = [];
|
|
159
|
+
const tableWidgetRefs = /* @__PURE__ */ new Map();
|
|
146
160
|
return {
|
|
147
161
|
id: "registry.injection-widgets",
|
|
148
162
|
outputFiles: ["injection-widgets.generated.ts", "injection-tables.generated.ts"],
|
|
@@ -171,6 +185,11 @@ function createInjectionWidgetsExtension() {
|
|
|
171
185
|
if (moduleWidgetEntries.length === 1 && tableWidgetIds.length === 1 && !moduleWidgetEntries[0].widgetId) {
|
|
172
186
|
moduleWidgetEntries[0].widgetId = tableWidgetIds[0];
|
|
173
187
|
}
|
|
188
|
+
for (const widgetId of tableWidgetIds) {
|
|
189
|
+
const modules = tableWidgetRefs.get(widgetId) ?? /* @__PURE__ */ new Set();
|
|
190
|
+
modules.add(ctx.moduleId);
|
|
191
|
+
tableWidgetRefs.set(widgetId, modules);
|
|
192
|
+
}
|
|
174
193
|
for (const entry of moduleWidgetEntries) {
|
|
175
194
|
const existing = widgetEntries.get(entry.key);
|
|
176
195
|
if (!existing || existing.source !== "app" && entry.source === "app") {
|
|
@@ -186,6 +205,7 @@ function createInjectionWidgetsExtension() {
|
|
|
186
205
|
}
|
|
187
206
|
},
|
|
188
207
|
generateOutput() {
|
|
208
|
+
reportUnresolvableWidgetReferences(widgetEntries, tableWidgetRefs);
|
|
189
209
|
const widgetDecls = Array.from(widgetEntries.entries()).sort(([left], [right]) => left.localeCompare(right)).map(
|
|
190
210
|
([, entry]) => objectLiteral([
|
|
191
211
|
{ name: "moduleId", value: entry.moduleId },
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/generators/extensions/injection-widgets.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from 'node:fs'\nimport path from 'node:path'\nimport { VariableDeclarationKind } from 'ts-morph'\nimport ts from 'typescript-js'\nimport type { GeneratorExtension } from '../extension'\nimport { resolveStandaloneSourceMirrorBase, scanModuleDir, SCAN_CONFIGS, type ModuleRoots } from '../scanner'\nimport {\n arrayLiteral,\n arrowFunction,\n identifier,\n methodCall,\n nullishCoalesce,\n objectLiteral,\n propertyAccess,\n writeValue,\n} from '../ast'\nimport { dynamicImportExpression, emptyObject, namespaceFallback, namespaceImportSpec, renderGeneratedTsSource } from './shared'\n\ntype InjectionWidgetEntry = {\n moduleId: string\n key: string\n source: 'app' | 'package'\n importPath: string\n widgetId?: string\n}\n\ntype InjectionTableEntry = {\n moduleId: string\n importName: string\n importPath: string\n}\n\nfunction unwrapExpression(expression: ts.Expression): ts.Expression {\n let current = expression\n while (\n ts.isParenthesizedExpression(current)\n || ts.isAsExpression(current)\n || ts.isTypeAssertionExpression(current)\n || ts.isSatisfiesExpression(current)\n ) {\n current = current.expression\n }\n return current\n}\n\nfunction getPropertyNameText(name: ts.PropertyName): string | null {\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNoSubstitutionTemplateLiteral(name)) {\n return name.text\n }\n return null\n}\n\nfunction collectObjectDeclarations(sourceFile: ts.SourceFile): Map<string, ts.ObjectLiteralExpression> {\n const declarations = new Map<string, ts.ObjectLiteralExpression>()\n for (const statement of sourceFile.statements) {\n if (!ts.isVariableStatement(statement)) continue\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name) || !declaration.initializer) continue\n const initializer = unwrapExpression(declaration.initializer)\n if (ts.isObjectLiteralExpression(initializer)) {\n declarations.set(declaration.name.text, initializer)\n }\n }\n }\n return declarations\n}\n\nfunction resolveObjectExpression(\n expression: ts.Expression,\n declarations: Map<string, ts.ObjectLiteralExpression>,\n): ts.ObjectLiteralExpression | null {\n const unwrapped = unwrapExpression(expression)\n if (ts.isObjectLiteralExpression(unwrapped)) return unwrapped\n if (ts.isIdentifier(unwrapped)) return declarations.get(unwrapped.text) ?? null\n return null\n}\n\nfunction getObjectPropertyExpression(object: ts.ObjectLiteralExpression, propertyName: string): ts.Expression | null {\n for (const property of object.properties) {\n if (!ts.isPropertyAssignment(property)) continue\n if (getPropertyNameText(property.name) === propertyName) return property.initializer\n }\n return null\n}\n\nfunction getStringPropertyValue(object: ts.ObjectLiteralExpression, propertyName: string): string | null {\n const expression = getObjectPropertyExpression(object, propertyName)\n if (!expression) return null\n const unwrapped = unwrapExpression(expression)\n if (ts.isStringLiteral(unwrapped) || ts.isNoSubstitutionTemplateLiteral(unwrapped)) return unwrapped.text\n return null\n}\n\nfunction extractMetadataId(object: ts.ObjectLiteralExpression): string | null {\n const metadata = getObjectPropertyExpression(object, 'metadata')\n if (!metadata) return null\n const unwrapped = unwrapExpression(metadata)\n if (!ts.isObjectLiteralExpression(unwrapped)) return null\n return getStringPropertyValue(unwrapped, 'id')\n}\n\nfunction extractWidgetMetadataId(absolutePath: string): string | null {\n try {\n const source = fs.readFileSync(absolutePath, 'utf8')\n const sourceFile = ts.createSourceFile(absolutePath, source, ts.ScriptTarget.Latest, true)\n const declarations = collectObjectDeclarations(sourceFile)\n\n for (const statement of sourceFile.statements) {\n if (!ts.isExportAssignment(statement) || statement.isExportEquals) continue\n const object = resolveObjectExpression(statement.expression, declarations)\n if (!object) continue\n const id = extractMetadataId(object)\n if (id) return id\n }\n\n for (const object of declarations.values()) {\n const id = extractMetadataId(object)\n if (id) return id\n }\n } catch {\n return null\n }\n return null\n}\n\nfunction collectWidgetIdsFromTableValue(\n value: ts.Expression,\n declarations: Map<string, ts.ObjectLiteralExpression>,\n ids: Set<string>,\n) {\n const expression = unwrapExpression(value)\n if (ts.isStringLiteral(expression) || ts.isNoSubstitutionTemplateLiteral(expression)) {\n ids.add(expression.text)\n return\n }\n if (ts.isArrayLiteralExpression(expression)) {\n for (const element of expression.elements) {\n if (ts.isExpression(element)) collectWidgetIdsFromTableValue(element, declarations, ids)\n }\n return\n }\n const object = resolveObjectExpression(expression, declarations)\n if (!object) return\n const widgetId = getStringPropertyValue(object, 'widgetId')\n if (widgetId) ids.add(widgetId)\n}\n\nfunction extractInjectionTableWidgetIds(absolutePath: string): string[] {\n try {\n const source = fs.readFileSync(absolutePath, 'utf8')\n const sourceFile = ts.createSourceFile(absolutePath, source, ts.ScriptTarget.Latest, true)\n const declarations = collectObjectDeclarations(sourceFile)\n let tableObject: ts.ObjectLiteralExpression | null = null\n\n for (const statement of sourceFile.statements) {\n if (ts.isVariableStatement(statement)) {\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name) || declaration.name.text !== 'injectionTable' || !declaration.initializer) {\n continue\n }\n tableObject = resolveObjectExpression(declaration.initializer, declarations)\n }\n }\n if (ts.isExportAssignment(statement) && !statement.isExportEquals) {\n tableObject ??= resolveObjectExpression(statement.expression, declarations)\n }\n }\n\n if (!tableObject) return []\n const ids = new Set<string>()\n for (const property of tableObject.properties) {\n if (!ts.isPropertyAssignment(property)) continue\n collectWidgetIdsFromTableValue(property.initializer, declarations, ids)\n }\n return Array.from(ids)\n } catch {\n return []\n }\n}\n\nfunction resolveScannedWidgetPath(roots: ModuleRoots, fromApp: boolean, relPath: string): string {\n const base = fromApp ? roots.appBase : (resolveStandaloneSourceMirrorBase(roots.pkgBase) ?? roots.pkgBase)\n return path.join(base, 'widgets', 'injection', ...relPath.split('/'))\n}\n\nexport function createInjectionWidgetsExtension(): GeneratorExtension {\n const widgetEntries = new Map<string, InjectionWidgetEntry>()\n const tableEntries: InjectionTableEntry[] = []\n\n return {\n id: 'registry.injection-widgets',\n outputFiles: ['injection-widgets.generated.ts', 'injection-tables.generated.ts'],\n scanModule(ctx) {\n const files = scanModuleDir(ctx.roots, SCAN_CONFIGS.injectionWidgets)\n const moduleWidgetEntries: InjectionWidgetEntry[] = []\n for (const { relPath, fromApp } of files) {\n const segments = relPath.split('/')\n const file = segments.pop() ?? ''\n const base = file.replace(/\\.(t|j)sx?$/, '')\n const importPath = ctx.sanitizeGeneratedModuleSpecifier(\n `${fromApp ? ctx.imps.appBase : ctx.imps.pkgBase}/widgets/injection/${[...segments, base].join('/')}`\n )\n const key = [ctx.moduleId, ...segments, base].filter(Boolean).join(':')\n const entry: InjectionWidgetEntry = {\n moduleId: ctx.moduleId,\n key,\n source: fromApp ? 'app' : 'package',\n importPath,\n widgetId: extractWidgetMetadataId(resolveScannedWidgetPath(ctx.roots, fromApp, relPath)) ?? undefined,\n }\n moduleWidgetEntries.push(entry)\n }\n\n const table = ctx.resolveModuleFile(ctx.roots, ctx.imps, 'widgets/injection-table.ts')\n const tableWidgetIds = table ? extractInjectionTableWidgetIds(table.absolutePath) : []\n if (moduleWidgetEntries.length === 1 && tableWidgetIds.length === 1 && !moduleWidgetEntries[0].widgetId) {\n moduleWidgetEntries[0].widgetId = tableWidgetIds[0]\n }\n\n for (const entry of moduleWidgetEntries) {\n const existing = widgetEntries.get(entry.key)\n if (!existing || (existing.source !== 'app' && entry.source === 'app')) {\n widgetEntries.set(entry.key, entry)\n }\n }\n\n if (table) {\n tableEntries.push({\n moduleId: ctx.moduleId,\n importName: `InjTable_${ctx.moduleId.replace(/[^a-zA-Z0-9_]/g, '_')}_${ctx.importIdRef.value++}`,\n importPath: ctx.sanitizeGeneratedModuleSpecifier(table.importPath),\n })\n }\n },\n generateOutput() {\n const widgetDecls = Array.from(widgetEntries.entries())\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([, entry]) =>\n objectLiteral([\n { name: 'moduleId', value: entry.moduleId },\n { name: 'key', value: entry.key },\n { name: 'source', value: entry.source },\n ...(entry.widgetId ? [{ name: 'widgetId', value: entry.widgetId }] : []),\n {\n name: 'loader',\n value: arrowFunction({\n body: methodCall(dynamicImportExpression(entry.importPath), 'then', [\n arrowFunction({\n parameters: ['mod'],\n body: nullishCoalesce([\n propertyAccess(identifier('mod'), 'default'),\n identifier('mod'),\n ]),\n }),\n ]),\n }),\n },\n ]),\n )\n\n const widgetsOutput = renderGeneratedTsSource({\n fileName: 'injection-widgets.generated.ts',\n imports: [\n { namedImports: [{ name: 'ModuleInjectionWidgetEntry', isTypeOnly: true }], moduleSpecifier: '@open-mercato/shared/modules/registry' },\n ],\n build(sourceFile) {\n sourceFile.addVariableStatement({\n declarationKind: VariableDeclarationKind.Const,\n isExported: true,\n declarations: [\n {\n name: 'injectionWidgetEntries',\n type: 'ModuleInjectionWidgetEntry[]',\n initializer: arrayLiteral(widgetDecls, writeValue),\n },\n ],\n })\n },\n })\n\n const tableImports = tableEntries.map((entry) => namespaceImportSpec(entry.importName, entry.importPath))\n const tableDecls = tableEntries.map((entry) =>\n objectLiteral([\n { name: 'moduleId', value: entry.moduleId },\n {\n name: 'table',\n value: namespaceFallback({\n importName: entry.importName,\n members: ['default', 'injectionTable'],\n fallback: emptyObject(),\n castType: 'ModuleInjectionTable',\n }),\n },\n ]),\n )\n const tablesOutput = renderGeneratedTsSource({\n fileName: 'injection-tables.generated.ts',\n imports: [\n { namedImports: [{ name: 'ModuleInjectionTable', isTypeOnly: true }], moduleSpecifier: '@open-mercato/shared/modules/widgets/injection' },\n ...tableImports,\n ],\n build(sourceFile) {\n sourceFile.addVariableStatement({\n declarationKind: VariableDeclarationKind.Const,\n isExported: true,\n declarations: [\n {\n name: 'injectionTables',\n type: 'Array<{ moduleId: string; table: ModuleInjectionTable }>',\n initializer: arrayLiteral(tableDecls, writeValue),\n },\n ],\n })\n },\n })\n\n return new Map([\n ['injection-widgets.generated.ts', widgetsOutput],\n ['injection-tables.generated.ts', tablesOutput],\n ])\n },\n }\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import fs from 'node:fs'\nimport path from 'node:path'\nimport { VariableDeclarationKind } from 'ts-morph'\nimport ts from 'typescript-js'\nimport type { GeneratorExtension } from '../extension'\nimport { resolveStandaloneSourceMirrorBase, scanModuleDir, SCAN_CONFIGS, type ModuleRoots } from '../scanner'\nimport {\n arrayLiteral,\n arrowFunction,\n identifier,\n methodCall,\n nullishCoalesce,\n objectLiteral,\n propertyAccess,\n writeValue,\n} from '../ast'\nimport { dynamicImportExpression, emptyObject, namespaceFallback, namespaceImportSpec, renderGeneratedTsSource } from './shared'\n\ntype InjectionWidgetEntry = {\n moduleId: string\n key: string\n source: 'app' | 'package'\n importPath: string\n widgetId?: string\n}\n\ntype InjectionTableEntry = {\n moduleId: string\n importName: string\n importPath: string\n}\n\nfunction unwrapExpression(expression: ts.Expression): ts.Expression {\n let current = expression\n while (\n ts.isParenthesizedExpression(current)\n || ts.isAsExpression(current)\n || ts.isTypeAssertionExpression(current)\n || ts.isSatisfiesExpression(current)\n ) {\n current = current.expression\n }\n return current\n}\n\nfunction getPropertyNameText(name: ts.PropertyName): string | null {\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNoSubstitutionTemplateLiteral(name)) {\n return name.text\n }\n return null\n}\n\nfunction collectObjectDeclarations(sourceFile: ts.SourceFile): Map<string, ts.ObjectLiteralExpression> {\n const declarations = new Map<string, ts.ObjectLiteralExpression>()\n for (const statement of sourceFile.statements) {\n if (!ts.isVariableStatement(statement)) continue\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name) || !declaration.initializer) continue\n const initializer = unwrapExpression(declaration.initializer)\n if (ts.isObjectLiteralExpression(initializer)) {\n declarations.set(declaration.name.text, initializer)\n }\n }\n }\n return declarations\n}\n\nfunction resolveObjectExpression(\n expression: ts.Expression,\n declarations: Map<string, ts.ObjectLiteralExpression>,\n): ts.ObjectLiteralExpression | null {\n const unwrapped = unwrapExpression(expression)\n if (ts.isObjectLiteralExpression(unwrapped)) return unwrapped\n if (ts.isIdentifier(unwrapped)) return declarations.get(unwrapped.text) ?? null\n return null\n}\n\nfunction getObjectPropertyExpression(object: ts.ObjectLiteralExpression, propertyName: string): ts.Expression | null {\n for (const property of object.properties) {\n if (!ts.isPropertyAssignment(property)) continue\n if (getPropertyNameText(property.name) === propertyName) return property.initializer\n }\n return null\n}\n\nfunction getStringPropertyValue(object: ts.ObjectLiteralExpression, propertyName: string): string | null {\n const expression = getObjectPropertyExpression(object, propertyName)\n if (!expression) return null\n const unwrapped = unwrapExpression(expression)\n if (ts.isStringLiteral(unwrapped) || ts.isNoSubstitutionTemplateLiteral(unwrapped)) return unwrapped.text\n return null\n}\n\nfunction extractMetadataId(object: ts.ObjectLiteralExpression): string | null {\n const metadata = getObjectPropertyExpression(object, 'metadata')\n if (!metadata) return null\n const unwrapped = unwrapExpression(metadata)\n if (!ts.isObjectLiteralExpression(unwrapped)) return null\n return getStringPropertyValue(unwrapped, 'id')\n}\n\nfunction extractWidgetMetadataId(absolutePath: string): string | null {\n try {\n const source = fs.readFileSync(absolutePath, 'utf8')\n const sourceFile = ts.createSourceFile(absolutePath, source, ts.ScriptTarget.Latest, true)\n const declarations = collectObjectDeclarations(sourceFile)\n\n for (const statement of sourceFile.statements) {\n if (!ts.isExportAssignment(statement) || statement.isExportEquals) continue\n const object = resolveObjectExpression(statement.expression, declarations)\n if (!object) continue\n const id = extractMetadataId(object)\n if (id) return id\n }\n\n for (const object of declarations.values()) {\n const id = extractMetadataId(object)\n if (id) return id\n }\n } catch {\n return null\n }\n return null\n}\n\nfunction collectWidgetIdsFromTableValue(\n value: ts.Expression,\n declarations: Map<string, ts.ObjectLiteralExpression>,\n ids: Set<string>,\n) {\n const expression = unwrapExpression(value)\n if (ts.isStringLiteral(expression) || ts.isNoSubstitutionTemplateLiteral(expression)) {\n ids.add(expression.text)\n return\n }\n if (ts.isArrayLiteralExpression(expression)) {\n for (const element of expression.elements) {\n if (ts.isExpression(element)) collectWidgetIdsFromTableValue(element, declarations, ids)\n }\n return\n }\n const object = resolveObjectExpression(expression, declarations)\n if (!object) return\n const widgetId = getStringPropertyValue(object, 'widgetId')\n if (widgetId) ids.add(widgetId)\n}\n\nfunction extractInjectionTableWidgetIds(absolutePath: string): string[] {\n try {\n const source = fs.readFileSync(absolutePath, 'utf8')\n const sourceFile = ts.createSourceFile(absolutePath, source, ts.ScriptTarget.Latest, true)\n const declarations = collectObjectDeclarations(sourceFile)\n let tableObject: ts.ObjectLiteralExpression | null = null\n\n for (const statement of sourceFile.statements) {\n if (ts.isVariableStatement(statement)) {\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name) || declaration.name.text !== 'injectionTable' || !declaration.initializer) {\n continue\n }\n tableObject = resolveObjectExpression(declaration.initializer, declarations)\n }\n }\n if (ts.isExportAssignment(statement) && !statement.isExportEquals) {\n tableObject ??= resolveObjectExpression(statement.expression, declarations)\n }\n }\n\n if (!tableObject) return []\n const ids = new Set<string>()\n for (const property of tableObject.properties) {\n if (!ts.isPropertyAssignment(property)) continue\n collectWidgetIdsFromTableValue(property.initializer, declarations, ids)\n }\n return Array.from(ids)\n } catch {\n return []\n }\n}\n\nfunction resolveScannedWidgetPath(roots: ModuleRoots, fromApp: boolean, relPath: string): string {\n const base = fromApp ? roots.appBase : (resolveStandaloneSourceMirrorBase(roots.pkgBase) ?? roots.pkgBase)\n return path.join(base, 'widgets', 'injection', ...relPath.split('/'))\n}\n\n/**\n * A widget's `metadata.id` and the injection-table entry that mounts it are two hand-typed string\n * literals in two different files, and nothing links them. A typo in either fails silently: the spot\n * resolves to no widget and nothing is logged, so it only surfaces as \"why isn't my widget\n * rendering\" during manual QA.\n *\n * Reports table entries whose `widgetId` no scanned widget declares. Diagnostics only \u2014 generated\n * output is unchanged and the build is not failed, since a table entry may legitimately point at a\n * widget supplied by a module that is not enabled in this app.\n *\n * Deliberately one-directional. The mirror check (\"a widget nothing references is never mounted\")\n * cannot be done reliably yet: `extractInjectionTableWidgetIds` only reads statically-analyzable\n * object literals, so a table assembled by composition or computation contributes **no** visible\n * ids \u2014 `example` exports `cond ? { ...a, ...b } : a` and `translations` exports\n * `buildInjectionTable()`, and both would have every one of their widgets reported as unreferenced.\n * Under-reporting is harmless in the direction implemented here (a reference the extractor never saw\n * cannot produce a warning) but fatal in the other. Teaching the extractor to resolve spreads,\n * conditionals and call expressions is the prerequisite for adding it.\n */\nfunction reportUnresolvableWidgetReferences(\n widgetEntries: Map<string, InjectionWidgetEntry>,\n tableWidgetRefs: Map<string, Set<string>>,\n): void {\n const declaredIds = new Set<string>()\n for (const entry of widgetEntries.values()) {\n if (entry.widgetId) declaredIds.add(entry.widgetId)\n }\n\n for (const [widgetId, modules] of Array.from(tableWidgetRefs.entries()).sort(([a], [b]) => a.localeCompare(b))) {\n if (declaredIds.has(widgetId)) continue\n const owners = Array.from(modules).sort((left, right) => left.localeCompare(right)).join(', ')\n console.warn(\n `[generate] \u26A0 Injection table in \"${owners}\" references widget id \"${widgetId}\", but no scanned ` +\n 'widget declares it \u2014 that spot will render nothing. Check the id against the widget\\'s ' +\n 'metadata.id, and that the widget lives in a file the scanner reads ' +\n '(widgets/injection/**/widget.ts|tsx \u2014 note that widget.client.tsx alone is not scanned).',\n )\n }\n}\n\nexport function createInjectionWidgetsExtension(): GeneratorExtension {\n const widgetEntries = new Map<string, InjectionWidgetEntry>()\n const tableEntries: InjectionTableEntry[] = []\n // widgetId -> module ids whose injection table references it. Collected across every module so a\n // table may legitimately reference a widget another module owns.\n const tableWidgetRefs = new Map<string, Set<string>>()\n\n return {\n id: 'registry.injection-widgets',\n outputFiles: ['injection-widgets.generated.ts', 'injection-tables.generated.ts'],\n scanModule(ctx) {\n const files = scanModuleDir(ctx.roots, SCAN_CONFIGS.injectionWidgets)\n const moduleWidgetEntries: InjectionWidgetEntry[] = []\n for (const { relPath, fromApp } of files) {\n const segments = relPath.split('/')\n const file = segments.pop() ?? ''\n const base = file.replace(/\\.(t|j)sx?$/, '')\n const importPath = ctx.sanitizeGeneratedModuleSpecifier(\n `${fromApp ? ctx.imps.appBase : ctx.imps.pkgBase}/widgets/injection/${[...segments, base].join('/')}`\n )\n const key = [ctx.moduleId, ...segments, base].filter(Boolean).join(':')\n const entry: InjectionWidgetEntry = {\n moduleId: ctx.moduleId,\n key,\n source: fromApp ? 'app' : 'package',\n importPath,\n widgetId: extractWidgetMetadataId(resolveScannedWidgetPath(ctx.roots, fromApp, relPath)) ?? undefined,\n }\n moduleWidgetEntries.push(entry)\n }\n\n const table = ctx.resolveModuleFile(ctx.roots, ctx.imps, 'widgets/injection-table.ts')\n const tableWidgetIds = table ? extractInjectionTableWidgetIds(table.absolutePath) : []\n if (moduleWidgetEntries.length === 1 && tableWidgetIds.length === 1 && !moduleWidgetEntries[0].widgetId) {\n moduleWidgetEntries[0].widgetId = tableWidgetIds[0]\n }\n\n for (const widgetId of tableWidgetIds) {\n const modules = tableWidgetRefs.get(widgetId) ?? new Set<string>()\n modules.add(ctx.moduleId)\n tableWidgetRefs.set(widgetId, modules)\n }\n\n for (const entry of moduleWidgetEntries) {\n const existing = widgetEntries.get(entry.key)\n if (!existing || (existing.source !== 'app' && entry.source === 'app')) {\n widgetEntries.set(entry.key, entry)\n }\n }\n\n if (table) {\n tableEntries.push({\n moduleId: ctx.moduleId,\n importName: `InjTable_${ctx.moduleId.replace(/[^a-zA-Z0-9_]/g, '_')}_${ctx.importIdRef.value++}`,\n importPath: ctx.sanitizeGeneratedModuleSpecifier(table.importPath),\n })\n }\n },\n generateOutput() {\n reportUnresolvableWidgetReferences(widgetEntries, tableWidgetRefs)\n\n const widgetDecls = Array.from(widgetEntries.entries())\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([, entry]) =>\n objectLiteral([\n { name: 'moduleId', value: entry.moduleId },\n { name: 'key', value: entry.key },\n { name: 'source', value: entry.source },\n ...(entry.widgetId ? [{ name: 'widgetId', value: entry.widgetId }] : []),\n {\n name: 'loader',\n value: arrowFunction({\n body: methodCall(dynamicImportExpression(entry.importPath), 'then', [\n arrowFunction({\n parameters: ['mod'],\n body: nullishCoalesce([\n propertyAccess(identifier('mod'), 'default'),\n identifier('mod'),\n ]),\n }),\n ]),\n }),\n },\n ]),\n )\n\n const widgetsOutput = renderGeneratedTsSource({\n fileName: 'injection-widgets.generated.ts',\n imports: [\n { namedImports: [{ name: 'ModuleInjectionWidgetEntry', isTypeOnly: true }], moduleSpecifier: '@open-mercato/shared/modules/registry' },\n ],\n build(sourceFile) {\n sourceFile.addVariableStatement({\n declarationKind: VariableDeclarationKind.Const,\n isExported: true,\n declarations: [\n {\n name: 'injectionWidgetEntries',\n type: 'ModuleInjectionWidgetEntry[]',\n initializer: arrayLiteral(widgetDecls, writeValue),\n },\n ],\n })\n },\n })\n\n const tableImports = tableEntries.map((entry) => namespaceImportSpec(entry.importName, entry.importPath))\n const tableDecls = tableEntries.map((entry) =>\n objectLiteral([\n { name: 'moduleId', value: entry.moduleId },\n {\n name: 'table',\n value: namespaceFallback({\n importName: entry.importName,\n members: ['default', 'injectionTable'],\n fallback: emptyObject(),\n castType: 'ModuleInjectionTable',\n }),\n },\n ]),\n )\n const tablesOutput = renderGeneratedTsSource({\n fileName: 'injection-tables.generated.ts',\n imports: [\n { namedImports: [{ name: 'ModuleInjectionTable', isTypeOnly: true }], moduleSpecifier: '@open-mercato/shared/modules/widgets/injection' },\n ...tableImports,\n ],\n build(sourceFile) {\n sourceFile.addVariableStatement({\n declarationKind: VariableDeclarationKind.Const,\n isExported: true,\n declarations: [\n {\n name: 'injectionTables',\n type: 'Array<{ moduleId: string; table: ModuleInjectionTable }>',\n initializer: arrayLiteral(tableDecls, writeValue),\n },\n ],\n })\n },\n })\n\n return new Map([\n ['injection-widgets.generated.ts', widgetsOutput],\n ['injection-tables.generated.ts', tablesOutput],\n ])\n },\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|