@paakd/config 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/index.js +20 -0
- package/gen/go/addresses/Address.pkl.go +10 -0
- package/gen/go/addresses/Addresses.pkl.go +43 -0
- package/gen/go/addresses/BillingAddress.pkl.go +8 -0
- package/gen/go/addresses/Field.pkl.go +43 -0
- package/gen/go/addresses/addressgroup/AddressGroup.pkl.go +43 -0
- package/gen/go/addresses/fieldtype/FieldType.pkl.go +61 -0
- package/gen/go/addresses/init.pkl.go +11 -0
- package/gen/go/cloudflare/Cloudflare.pkl.go +37 -0
- package/gen/go/cloudflare/R2Bucket.pkl.go +22 -0
- package/gen/go/cloudflare/TerraformBackend.pkl.go +16 -0
- package/gen/go/cloudflare/Turnstile.pkl.go +8 -0
- package/gen/go/cloudflare/init.pkl.go +11 -0
- package/gen/go/db/DB.pkl.go +43 -0
- package/gen/go/db/DBConnection.pkl.go +12 -0
- package/gen/go/db/init.pkl.go +9 -0
- package/gen/go/dune/Dune.pkl.go +47 -0
- package/gen/go/dune/init.pkl.go +8 -0
- package/gen/go/enterprise/Enterprise.pkl.go +118 -0
- package/gen/go/enterprise/init.pkl.go +8 -0
- package/gen/go/enterprise/taxonomyversion/TaxonomyVersion.pkl.go +37 -0
- package/gen/go/redis/Redis.pkl.go +41 -0
- package/gen/go/redis/init.pkl.go +8 -0
- package/gen/go/shared/Build.pkl.go +46 -0
- package/gen/go/shared/Shared.pkl.go +35 -0
- package/gen/go/shared/init.pkl.go +9 -0
- package/gen/go/worker/Worker.pkl.go +55 -0
- package/gen/go/worker/WorkerConnect.pkl.go +6 -0
- package/gen/go/worker/init.pkl.go +9 -0
- package/gen/js/development/basket_eco_packages_config_addresses.pkl.ts +106 -0
- package/gen/js/development/basket_eco_packages_config_checkout.pkl.ts +73 -0
- package/gen/js/development/basket_eco_packages_config_cloudflare.pkl.ts +69 -0
- package/gen/js/development/basket_eco_packages_config_cms.pkl.ts +119 -0
- package/gen/js/development/basket_eco_packages_config_db.pkl.ts +47 -0
- package/gen/js/development/basket_eco_packages_config_dune.pkl.ts +36 -0
- package/gen/js/development/basket_eco_packages_config_enterprise.pkl.ts +290 -0
- package/gen/js/development/basket_eco_packages_config_feature.pkl.ts +58 -0
- package/gen/js/development/basket_eco_packages_config_redis.pkl.ts +30 -0
- package/gen/js/development/basket_eco_packages_config_renderer_development_cms.pkl.ts +28 -0
- package/gen/js/development/basket_eco_packages_config_shared.pkl.ts +73 -0
- package/gen/js/development/basket_eco_packages_config_worker.pkl.ts +53 -0
- package/gen/js/production/basket_eco_packages_config_addresses.pkl.ts +106 -0
- package/gen/js/production/basket_eco_packages_config_checkout.pkl.ts +73 -0
- package/gen/js/production/basket_eco_packages_config_cloudflare.pkl.ts +69 -0
- package/gen/js/production/basket_eco_packages_config_cms.pkl.ts +119 -0
- package/gen/js/production/basket_eco_packages_config_db.pkl.ts +47 -0
- package/gen/js/production/basket_eco_packages_config_dune.pkl.ts +36 -0
- package/gen/js/production/basket_eco_packages_config_enterprise.pkl.ts +290 -0
- package/gen/js/production/basket_eco_packages_config_feature.pkl.ts +58 -0
- package/gen/js/production/basket_eco_packages_config_kiosk_host.pkl.ts +72 -0
- package/gen/js/production/basket_eco_packages_config_redis.pkl.ts +30 -0
- package/gen/js/production/basket_eco_packages_config_renderer_production_cms.pkl.ts +28 -0
- package/gen/js/production/basket_eco_packages_config_renderer_production_dune_config.pkl.ts +29 -0
- package/gen/js/production/basket_eco_packages_config_renderer_production_workflow_config.pkl.ts +29 -0
- package/gen/js/production/basket_eco_packages_config_renderer_staging_dune_config.pkl.ts +29 -0
- package/gen/js/production/basket_eco_packages_config_shared.pkl.ts +73 -0
- package/gen/js/production/basket_eco_packages_config_worker.pkl.ts +49 -0
- package/gen/js/staging/basket_eco_packages_config_addresses.pkl.ts +106 -0
- package/gen/js/staging/basket_eco_packages_config_checkout.pkl.ts +77 -0
- package/gen/js/staging/basket_eco_packages_config_cloudflare.pkl.ts +74 -0
- package/gen/js/staging/basket_eco_packages_config_cms.pkl.ts +119 -0
- package/gen/js/staging/basket_eco_packages_config_db.pkl.ts +47 -0
- package/gen/js/staging/basket_eco_packages_config_dune.pkl.ts +40 -0
- package/gen/js/staging/basket_eco_packages_config_enterprise.pkl.ts +290 -0
- package/gen/js/staging/basket_eco_packages_config_feature.pkl.ts +58 -0
- package/gen/js/staging/basket_eco_packages_config_redis.pkl.ts +30 -0
- package/gen/js/staging/basket_eco_packages_config_renderer_staging_cms.pkl.ts +28 -0
- package/gen/js/staging/basket_eco_packages_config_renderer_staging_dune_config.pkl.ts +29 -0
- package/gen/js/staging/basket_eco_packages_config_renderer_staging_workflow_config.pkl.ts +29 -0
- package/gen/js/staging/basket_eco_packages_config_shared.pkl.ts +69 -0
- package/gen/js/staging/basket_eco_packages_config_worker.pkl.ts +53 -0
- package/package.json +66 -0
- package/src/addresses.ts +90 -0
- package/src/authorization/policy.conf +15 -0
- package/src/authorization/policy.csv +26 -0
- package/src/chk.spec.ts +61 -0
- package/src/chk.ts +88 -0
- package/src/cms.test.ts +52 -0
- package/src/cms.ts +65 -0
- package/src/index.ts +4 -0
- package/src/pkl/PklProject +21 -0
- package/src/pkl/development/Addresses.pkl +2114 -0
- package/src/pkl/development/CMS.pkl +37 -0
- package/src/pkl/development/Checkout.pkl +32 -0
- package/src/pkl/development/Cloudflare.pkl +20 -0
- package/src/pkl/development/Db.pkl +14 -0
- package/src/pkl/development/Dune.pkl +12 -0
- package/src/pkl/development/Enterprise.pkl +158 -0
- package/src/pkl/development/Feature.pkl +4 -0
- package/src/pkl/development/Redis.pkl +6 -0
- package/src/pkl/development/Shared.pkl +16 -0
- package/src/pkl/development/Worker.pkl +43 -0
- package/src/pkl/development/renderer/CMS.pkl +59 -0
- package/src/pkl/production/Addresses.pkl +2114 -0
- package/src/pkl/production/CMS.pkl +34 -0
- package/src/pkl/production/Checkout.pkl +32 -0
- package/src/pkl/production/Cloudflare.pkl +20 -0
- package/src/pkl/production/Db.pkl +14 -0
- package/src/pkl/production/Dune.pkl +12 -0
- package/src/pkl/production/Enterprise.pkl +158 -0
- package/src/pkl/production/Feature.pkl +8 -0
- package/src/pkl/production/KioskHost.pkl +5 -0
- package/src/pkl/production/Redis.pkl +6 -0
- package/src/pkl/production/Shared.pkl +15 -0
- package/src/pkl/production/Worker.pkl +43 -0
- package/src/pkl/production/renderer/CMS.pkl +59 -0
- package/src/pkl/production/renderer/Dune.pkl +52 -0
- package/src/pkl/production/renderer/Feature.pkl +51 -0
- package/src/pkl/production/renderer/Workflow.pkl +51 -0
- package/src/pkl/staging/Addresses.pkl +2114 -0
- package/src/pkl/staging/CMS.pkl +35 -0
- package/src/pkl/staging/Checkout.pkl +32 -0
- package/src/pkl/staging/Cloudflare.pkl +20 -0
- package/src/pkl/staging/Db.pkl +14 -0
- package/src/pkl/staging/Dune.pkl +12 -0
- package/src/pkl/staging/Enterprise.pkl +158 -0
- package/src/pkl/staging/Feature.pkl +8 -0
- package/src/pkl/staging/Redis.pkl +6 -0
- package/src/pkl/staging/Shared.pkl +16 -0
- package/src/pkl/staging/Worker.pkl +43 -0
- package/src/pkl/staging/renderer/CMS.pkl +59 -0
- package/src/pkl/staging/renderer/Dune.pkl +52 -0
- package/src/pkl/staging/renderer/Feature.pkl +51 -0
- package/src/pkl/staging/renderer/Workflow.pkl +51 -0
- package/src/pkl/tmpl/AddressesTmpl.pkl +44 -0
- package/src/pkl/tmpl/CMSTmpl.pkl +64 -0
- package/src/pkl/tmpl/CheckoutTmpl.pkl +34 -0
- package/src/pkl/tmpl/CloudflareTmpl.pkl +33 -0
- package/src/pkl/tmpl/DbTmpl.pkl +18 -0
- package/src/pkl/tmpl/DuneTmpl.pkl +124 -0
- package/src/pkl/tmpl/EnterpriseTmpl.pkl +105 -0
- package/src/pkl/tmpl/FeatureTmpl.pkl +90 -0
- package/src/pkl/tmpl/KioskHostTmpl.pkl +194 -0
- package/src/pkl/tmpl/RedisTmpl.pkl +9 -0
- package/src/pkl/tmpl/SharedTmpl.pkl +40 -0
- package/src/pkl/tmpl/WorkerTmpl.pkl +27 -0
- package/src/pkl-reader/main.go +167 -0
- package/src/shared.ts +65 -0
- package/src/vault.spec.ts +62 -0
- package/src/vault.ts +68 -0
package/src/addresses.ts
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import * as pklTypescript from '@pkl-community/pkl-typescript'
|
|
2
|
+
import {
|
|
3
|
+
load as devLoad,
|
|
4
|
+
type Address,
|
|
5
|
+
type Addresses,
|
|
6
|
+
type Field,
|
|
7
|
+
} from '../gen/js/development/basket_eco_packages_config_addresses.pkl'
|
|
8
|
+
import { load as prodLoad } from '../gen/js/production/basket_eco_packages_config_addresses.pkl'
|
|
9
|
+
import { load as stgLoad } from '../gen/js/staging/basket_eco_packages_config_addresses.pkl'
|
|
10
|
+
import { vaultReader } from './vault'
|
|
11
|
+
|
|
12
|
+
let envPath = '../../.env.development'
|
|
13
|
+
if (process.env.BUILD_ENV === 'production') {
|
|
14
|
+
envPath = '/.env'
|
|
15
|
+
} else if (process.env.BUILD_ENV === 'staging') {
|
|
16
|
+
envPath = '../../.env'
|
|
17
|
+
}
|
|
18
|
+
require('dotenv').config({
|
|
19
|
+
path: envPath,
|
|
20
|
+
override: true,
|
|
21
|
+
debug: false,
|
|
22
|
+
quiet: true,
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
export const getAddressesConfig: () => Promise<Addresses> = async () => {
|
|
26
|
+
const evaluator = await pklTypescript.newEvaluator({
|
|
27
|
+
env: {
|
|
28
|
+
BUILD_ENV: process.env.BUILD_ENV || 'development',
|
|
29
|
+
ENTERPRISE_ENV: process.env.ENTERPRISE_ENV || 'development',
|
|
30
|
+
VAULT_TOKEN: process.env.VAULT_TOKEN || '',
|
|
31
|
+
SHOP_ID: process.env.SHOP_ID || '',
|
|
32
|
+
},
|
|
33
|
+
allowedResources: [
|
|
34
|
+
'http:',
|
|
35
|
+
'https:',
|
|
36
|
+
'file:',
|
|
37
|
+
'env:',
|
|
38
|
+
'prop:',
|
|
39
|
+
'modulepath:',
|
|
40
|
+
'package:',
|
|
41
|
+
'projectpackage:',
|
|
42
|
+
'vault:',
|
|
43
|
+
],
|
|
44
|
+
allowedModules: [
|
|
45
|
+
'pkl:',
|
|
46
|
+
'repl:',
|
|
47
|
+
'file:',
|
|
48
|
+
'http:',
|
|
49
|
+
'https:',
|
|
50
|
+
'modulepath:',
|
|
51
|
+
'package:',
|
|
52
|
+
'projectpackage:',
|
|
53
|
+
],
|
|
54
|
+
projectDir: '../../packages/config/src/pkl/production',
|
|
55
|
+
declaredProjectDependencies: {
|
|
56
|
+
localDependencies: {},
|
|
57
|
+
remoteDependencies: {},
|
|
58
|
+
},
|
|
59
|
+
resourceReaders: [
|
|
60
|
+
{
|
|
61
|
+
scheme: 'vault',
|
|
62
|
+
isGlobbable: false,
|
|
63
|
+
hasHierarchicalUris: false,
|
|
64
|
+
listElements: (uri: URL): any => {
|
|
65
|
+
return []
|
|
66
|
+
},
|
|
67
|
+
read: vaultReader,
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
let load = devLoad
|
|
73
|
+
let sourcePath = '../../packages/config/src/pkl/development/Addresses.pkl'
|
|
74
|
+
|
|
75
|
+
if (process.env.BUILD_ENV === 'staging') {
|
|
76
|
+
load = stgLoad
|
|
77
|
+
sourcePath = '../../packages/config/src/pkl/staging/Addresses.pkl'
|
|
78
|
+
} else if (process.env.BUILD_ENV === 'production') {
|
|
79
|
+
load = prodLoad
|
|
80
|
+
sourcePath = '../../packages/config/src/pkl/production/Addresses.pkl'
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const result = await load(evaluator, pklTypescript.FileSource(sourcePath))
|
|
84
|
+
return result
|
|
85
|
+
} finally {
|
|
86
|
+
evaluator.close()
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export type { Address, Addresses, Field }
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
[request_definition]
|
|
2
|
+
r = sub, dom, obj, act
|
|
3
|
+
|
|
4
|
+
[policy_definition]
|
|
5
|
+
p = sub, dom, obj, act
|
|
6
|
+
|
|
7
|
+
[role_definition]
|
|
8
|
+
g = _, _, _
|
|
9
|
+
g2 = _, _
|
|
10
|
+
|
|
11
|
+
[policy_effect]
|
|
12
|
+
e = some(where (p.eft == allow)) && !some(where (p.eft == deny))
|
|
13
|
+
|
|
14
|
+
[matchers]
|
|
15
|
+
m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && (g2(r.obj, p.obj) || (r.obj == p.obj)) && r.act == p.act
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
p, sales_channel, enterprise, membership:auth:login, allow
|
|
2
|
+
p, sales_channel, enterprise, taxonomy:list, allow
|
|
3
|
+
p, sales_channel, enterprise, membership:auth:login-users, allow
|
|
4
|
+
p, sales_channel, enterprise, membership:auth:login-customers, allow
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
p, kiosk_admin, enterprise, api_key, read
|
|
8
|
+
p, kiosk_admin, enterprise, api_key, write
|
|
9
|
+
p, kiosk_admin, enterprise, api_key, delete
|
|
10
|
+
|
|
11
|
+
p, sales_channel, enterprise, policies, read
|
|
12
|
+
p, sales_channel, enterprise, policies, write
|
|
13
|
+
|
|
14
|
+
p, kiosk_admin, enterprise, store_details, read
|
|
15
|
+
p, kiosk_admin, enterprise, store_details, write
|
|
16
|
+
p, kiosk_admin, enterprise, membership:auth:add-users, allow
|
|
17
|
+
|
|
18
|
+
p, customer, enterprise, membership:customer:get-profile:basic, allow
|
|
19
|
+
|
|
20
|
+
p, kiosk_admin, enterprise, membership:customer:profile, write
|
|
21
|
+
|
|
22
|
+
g, web, sales_channel, enterprise
|
|
23
|
+
g, api, sales_channel, enterprise
|
|
24
|
+
g, mobile, sales_channel, enterprise
|
|
25
|
+
g, pos, sales_channel, enterprise
|
|
26
|
+
|
package/src/chk.spec.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import * as pklTypescript from '@pkl-community/pkl-typescript'
|
|
2
|
+
import * as chkModule from './chk'
|
|
3
|
+
|
|
4
|
+
vi.mock('dotenv', () => ({
|
|
5
|
+
config: vi.fn(),
|
|
6
|
+
}))
|
|
7
|
+
|
|
8
|
+
vi.mock('@pkl-community/pkl-typescript', async () => {
|
|
9
|
+
const actual = await vi.importActual<any>('@pkl-community/pkl-typescript')
|
|
10
|
+
return {
|
|
11
|
+
...actual,
|
|
12
|
+
newEvaluator: vi.fn().mockResolvedValue({
|
|
13
|
+
close: vi.fn(),
|
|
14
|
+
}),
|
|
15
|
+
FileSource: vi.fn(path => path),
|
|
16
|
+
}
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
vi.mock('../gen/js/production/basket_eco_packages_config_checkout.pkl', () => ({
|
|
20
|
+
load: vi.fn(() => Promise.resolve({ test: 'result' })),
|
|
21
|
+
}))
|
|
22
|
+
vi.mock('../gen/js/staging/basket_eco_packages_config_checkout.pkl', () => ({
|
|
23
|
+
load: vi.fn(() => Promise.resolve({ test: 'result' })),
|
|
24
|
+
}))
|
|
25
|
+
vi.mock(
|
|
26
|
+
'../gen/js/development/basket_eco_packages_config_checkout.pkl',
|
|
27
|
+
() => ({
|
|
28
|
+
load: vi.fn(() => Promise.resolve({ test: 'result' })),
|
|
29
|
+
})
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
describe('getCheckoutConfig', () => {
|
|
33
|
+
let evaluatorMock: any
|
|
34
|
+
|
|
35
|
+
beforeEach(() => {
|
|
36
|
+
evaluatorMock = { close: vi.fn() }
|
|
37
|
+
;(pklTypescript.newEvaluator as any).mockResolvedValue(evaluatorMock)
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
afterEach(() => {
|
|
41
|
+
vi.clearAllMocks()
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it('should load development config by default', async () => {
|
|
45
|
+
process.env.BUILD_ENV = undefined
|
|
46
|
+
const result = await chkModule.getCheckoutConfig()
|
|
47
|
+
expect(result).toEqual({ test: 'result' })
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
it('should load staging config when BUILD_ENV=staging', async () => {
|
|
51
|
+
process.env.BUILD_ENV = 'staging'
|
|
52
|
+
const result = await chkModule.getCheckoutConfig()
|
|
53
|
+
expect(result).toEqual({ test: 'result' })
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
it('should load production config when BUILD_ENV=production', async () => {
|
|
57
|
+
process.env.BUILD_ENV = 'production'
|
|
58
|
+
const result = await chkModule.getCheckoutConfig()
|
|
59
|
+
expect(result).toEqual({ test: 'result' })
|
|
60
|
+
})
|
|
61
|
+
})
|
package/src/chk.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as pklTypescript from '@pkl-community/pkl-typescript'
|
|
2
|
+
import { load as devLoad } from '../gen/js/development/basket_eco_packages_config_checkout.pkl'
|
|
3
|
+
import {
|
|
4
|
+
load as prodLoad,
|
|
5
|
+
type Checkout,
|
|
6
|
+
} from '../gen/js/production/basket_eco_packages_config_checkout.pkl'
|
|
7
|
+
import { load as stgLoad } from '../gen/js/staging/basket_eco_packages_config_checkout.pkl'
|
|
8
|
+
import { vaultReader } from './vault'
|
|
9
|
+
|
|
10
|
+
let envPath = '../../.env.development'
|
|
11
|
+
if (process.env.BUILD_ENV === 'production') {
|
|
12
|
+
envPath = '/.env'
|
|
13
|
+
} else if (process.env.BUILD_ENV === 'staging') {
|
|
14
|
+
envPath = '../../.env'
|
|
15
|
+
}
|
|
16
|
+
require('dotenv').config({
|
|
17
|
+
path: envPath,
|
|
18
|
+
override: true,
|
|
19
|
+
debug: false,
|
|
20
|
+
quiet: true,
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
export const getCheckoutConfig: () => Promise<Checkout> = async () => {
|
|
24
|
+
const evaluator = await pklTypescript.newEvaluator({
|
|
25
|
+
env: {
|
|
26
|
+
BUILD_ENV: process.env.BUILD_ENV || 'development',
|
|
27
|
+
ENTERPRISE_ENV: process.env.ENTERPRISE_ENV || 'development',
|
|
28
|
+
VAULT_TOKEN: process.env.VAULT_TOKEN || '',
|
|
29
|
+
SHOP_ID: process.env.SHOP_ID || '',
|
|
30
|
+
},
|
|
31
|
+
allowedResources: [
|
|
32
|
+
'http:',
|
|
33
|
+
'https:',
|
|
34
|
+
'file:',
|
|
35
|
+
'env:',
|
|
36
|
+
'prop:',
|
|
37
|
+
'modulepath:',
|
|
38
|
+
'package:',
|
|
39
|
+
'projectpackage:',
|
|
40
|
+
'vault:',
|
|
41
|
+
],
|
|
42
|
+
allowedModules: [
|
|
43
|
+
'pkl:',
|
|
44
|
+
'repl:',
|
|
45
|
+
'file:',
|
|
46
|
+
'http:',
|
|
47
|
+
'https:',
|
|
48
|
+
'modulepath:',
|
|
49
|
+
'package:',
|
|
50
|
+
'projectpackage:',
|
|
51
|
+
],
|
|
52
|
+
projectDir: '../../packages/config/src/pkl/production',
|
|
53
|
+
declaredProjectDependencies: {
|
|
54
|
+
localDependencies: {},
|
|
55
|
+
remoteDependencies: {},
|
|
56
|
+
},
|
|
57
|
+
resourceReaders: [
|
|
58
|
+
{
|
|
59
|
+
scheme: 'vault',
|
|
60
|
+
isGlobbable: false,
|
|
61
|
+
hasHierarchicalUris: false,
|
|
62
|
+
listElements: (uri: URL): any => {
|
|
63
|
+
return []
|
|
64
|
+
},
|
|
65
|
+
read: vaultReader,
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
let load = devLoad
|
|
71
|
+
let sourcePath = '../../packages/config/src/pkl/development/Checkout.pkl'
|
|
72
|
+
|
|
73
|
+
if (process.env.BUILD_ENV === 'staging') {
|
|
74
|
+
load = stgLoad
|
|
75
|
+
sourcePath = '../../packages/config/src/pkl/staging/Checkout.pkl'
|
|
76
|
+
} else if (process.env.BUILD_ENV === 'production') {
|
|
77
|
+
load = prodLoad
|
|
78
|
+
sourcePath = '../../packages/config/src/pkl/production/Checkout.pkl'
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
const result = await load(evaluator, pklTypescript.FileSource(sourcePath))
|
|
82
|
+
return result
|
|
83
|
+
} finally {
|
|
84
|
+
evaluator.close()
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export type { Checkout }
|
package/src/cms.test.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as pklTypescript from '@pkl-community/pkl-typescript'
|
|
2
|
+
import * as cmsModule from './cms'
|
|
3
|
+
|
|
4
|
+
vi.mock('@pkl-community/pkl-typescript', async () => {
|
|
5
|
+
const actual = await vi.importActual<any>('@pkl-community/pkl-typescript')
|
|
6
|
+
return {
|
|
7
|
+
...actual,
|
|
8
|
+
newEvaluator: vi.fn().mockResolvedValue({ close: vi.fn() }),
|
|
9
|
+
FileSource: vi.fn(path => path),
|
|
10
|
+
}
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
vi.mock('../gen/js/production/basket_eco_packages_config_cms.pkl', () => ({
|
|
14
|
+
load: vi.fn(() => Promise.resolve({ test: 'prod' })),
|
|
15
|
+
}))
|
|
16
|
+
vi.mock('../gen/js/staging/basket_eco_packages_config_cms.pkl', () => ({
|
|
17
|
+
load: vi.fn(() => Promise.resolve({ test: 'stg' })),
|
|
18
|
+
}))
|
|
19
|
+
vi.mock('../gen/js/development/basket_eco_packages_config_cms.pkl', () => ({
|
|
20
|
+
load: vi.fn(() => Promise.resolve({ test: 'dev' })),
|
|
21
|
+
}))
|
|
22
|
+
|
|
23
|
+
describe('getCMSConfig', () => {
|
|
24
|
+
let evaluatorMock: any
|
|
25
|
+
|
|
26
|
+
beforeEach(() => {
|
|
27
|
+
evaluatorMock = { close: vi.fn() }
|
|
28
|
+
;(pklTypescript.newEvaluator as any).mockResolvedValue(evaluatorMock)
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
afterEach(() => {
|
|
32
|
+
vi.clearAllMocks()
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('should load development config by default', async () => {
|
|
36
|
+
process.env.BUILD_ENV = undefined
|
|
37
|
+
const result = await cmsModule.getCMSConfig()
|
|
38
|
+
expect(result).toEqual({ test: 'dev' })
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('should load staging config when BUILD_ENV=staging', async () => {
|
|
42
|
+
process.env.BUILD_ENV = 'staging'
|
|
43
|
+
const result = await cmsModule.getCMSConfig()
|
|
44
|
+
expect(result).toEqual({ test: 'stg' })
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
it('should load production config when BUILD_ENV=production', async () => {
|
|
48
|
+
process.env.BUILD_ENV = 'production'
|
|
49
|
+
const result = await cmsModule.getCMSConfig()
|
|
50
|
+
expect(result).toEqual({ test: 'prod' })
|
|
51
|
+
})
|
|
52
|
+
})
|
package/src/cms.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import * as pklTypescript from '@pkl-community/pkl-typescript'
|
|
2
|
+
import {
|
|
3
|
+
load as prodLoad,
|
|
4
|
+
type CMS,
|
|
5
|
+
} from '../gen/js/production/basket_eco_packages_config_cms.pkl'
|
|
6
|
+
import { load as stgLoad } from '../gen/js/staging/basket_eco_packages_config_cms.pkl'
|
|
7
|
+
import { load as devLoad } from '../gen/js/development/basket_eco_packages_config_cms.pkl'
|
|
8
|
+
import { vaultReader } from './vault'
|
|
9
|
+
|
|
10
|
+
export const getCMSConfig: () => Promise<CMS> = async () => {
|
|
11
|
+
const evaluator = await pklTypescript.newEvaluator({
|
|
12
|
+
allowedResources: [
|
|
13
|
+
'http:',
|
|
14
|
+
'https:',
|
|
15
|
+
'file:',
|
|
16
|
+
'env:',
|
|
17
|
+
'prop:',
|
|
18
|
+
'modulepath:',
|
|
19
|
+
'package:',
|
|
20
|
+
'projectpackage:',
|
|
21
|
+
'vault:',
|
|
22
|
+
],
|
|
23
|
+
allowedModules: [
|
|
24
|
+
'pkl:',
|
|
25
|
+
'repl:',
|
|
26
|
+
'file:',
|
|
27
|
+
'http:',
|
|
28
|
+
'https:',
|
|
29
|
+
'modulepath:',
|
|
30
|
+
'package:',
|
|
31
|
+
'projectpackage:',
|
|
32
|
+
],
|
|
33
|
+
projectDir: '../../packages/config/src/pkl/production',
|
|
34
|
+
declaredProjectDependencies: {
|
|
35
|
+
localDependencies: {},
|
|
36
|
+
remoteDependencies: {},
|
|
37
|
+
},
|
|
38
|
+
resourceReaders: [
|
|
39
|
+
{
|
|
40
|
+
scheme: 'vault',
|
|
41
|
+
isGlobbable: false,
|
|
42
|
+
hasHierarchicalUris: false,
|
|
43
|
+
listElements: (uri: URL): any => {
|
|
44
|
+
return []
|
|
45
|
+
},
|
|
46
|
+
read: vaultReader,
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
})
|
|
50
|
+
try {
|
|
51
|
+
let load = devLoad
|
|
52
|
+
let sourcePath = '../../packages/config/src/pkl/development/CMS.pkl'
|
|
53
|
+
if (process.env.BUILD_ENV === 'staging') {
|
|
54
|
+
load = stgLoad
|
|
55
|
+
sourcePath = '../../packages/config/src/pkl/staging/CMS.pkl'
|
|
56
|
+
} else if (process.env.BUILD_ENV === 'production') {
|
|
57
|
+
load = prodLoad
|
|
58
|
+
sourcePath = '../../packages/config/src/pkl/production/CMS.pkl'
|
|
59
|
+
}
|
|
60
|
+
const result = await load(evaluator, pklTypescript.FileSource(sourcePath))
|
|
61
|
+
return result
|
|
62
|
+
} finally {
|
|
63
|
+
evaluator.close()
|
|
64
|
+
}
|
|
65
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
amends "pkl:Project"
|
|
2
|
+
|
|
3
|
+
package {
|
|
4
|
+
name = "@paakd/pkl"
|
|
5
|
+
baseUri = "package://paakd.com/\(name)"
|
|
6
|
+
version = "0.0.1"
|
|
7
|
+
packageZipUrl = "https://paakd.com/\(name)/\(name)@\(version).zip"
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
evaluatorSettings {
|
|
11
|
+
allowedResources {
|
|
12
|
+
"vault"
|
|
13
|
+
"env"
|
|
14
|
+
"file"
|
|
15
|
+
}
|
|
16
|
+
externalResourceReaders {
|
|
17
|
+
["vault"] {
|
|
18
|
+
executable = "packages/config/bin/reader"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|