@akanjs/cli 0.0.142 → 0.0.144
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/README.md +8 -0
- package/cjs/index.js +2437 -3204
- package/cjs/src/guidelines/___library/sharedUiStructureDescription.en.md +786 -0
- package/cjs/src/guidelines/___library/utilUiStructureDescription.en.md +395 -0
- package/cjs/src/guidelines/___lint/lintRuleDescription.en.md +64 -0
- package/cjs/src/guidelines/___module/moduleStructureDescription.en.md +80 -0
- package/cjs/src/guidelines/componentRule/componentRule.instruction.md +732 -0
- package/cjs/src/guidelines/databaseModule/databaseModule.instruction.md +691 -0
- package/cjs/src/guidelines/enumConstant/enumConstant.instruction.md +232 -0
- package/cjs/src/guidelines/fieldDecorator/fieldDecorator.instruction.md +611 -0
- package/cjs/src/guidelines/framework/framework.instruction.md +1112 -0
- package/cjs/src/guidelines/modelConstant/modelConstant.instruction.md +958 -0
- package/cjs/src/guidelines/modelDictionary/modelDictionary.instruction.md +583 -0
- package/cjs/src/guidelines/modelDocument/modelDocument.instruction.md +683 -0
- package/cjs/src/guidelines/modelService/modelService.instruction.md +935 -0
- package/cjs/src/guidelines/modelSignal/modelSignal.instruction.md +588 -0
- package/cjs/src/guidelines/modelStore/modelStore.instruction.md +591 -0
- package/cjs/src/guidelines/modelTemplate/modelTemplate.instruction.md +577 -0
- package/cjs/src/guidelines/modelUnit/modelUnit.instruction.md +833 -0
- package/cjs/src/guidelines/modelUtil/modelUtil.instruction.md +752 -0
- package/cjs/src/guidelines/modelView/modelView.instruction.md +1005 -0
- package/cjs/src/guidelines/modelZone/modelZone.instruction.md +528 -0
- package/cjs/src/guidelines/scalarConstant/scalarConstant.instruction.md +489 -0
- package/cjs/src/guidelines/scalarDictionary/scalarDictionary.instruction.md +347 -0
- package/cjs/src/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +318 -0
- package/cjs/src/guidelines/utilUiUsage/utilUiUsage.instruction.md +339 -0
- package/cjs/src/templates/module/__model__.dictionary.js +4 -5
- package/esm/index.js +2524 -3286
- package/esm/src/guidelines/___library/sharedUiStructureDescription.en.md +786 -0
- package/esm/src/guidelines/___library/utilUiStructureDescription.en.md +395 -0
- package/esm/src/guidelines/___lint/lintRuleDescription.en.md +64 -0
- package/esm/src/guidelines/___module/moduleStructureDescription.en.md +80 -0
- package/esm/src/guidelines/componentRule/componentRule.instruction.md +732 -0
- package/esm/src/guidelines/databaseModule/databaseModule.instruction.md +691 -0
- package/esm/src/guidelines/enumConstant/enumConstant.instruction.md +232 -0
- package/esm/src/guidelines/fieldDecorator/fieldDecorator.instruction.md +611 -0
- package/esm/src/guidelines/framework/framework.instruction.md +1112 -0
- package/esm/src/guidelines/modelConstant/modelConstant.instruction.md +958 -0
- package/esm/src/guidelines/modelDictionary/modelDictionary.instruction.md +583 -0
- package/esm/src/guidelines/modelDocument/modelDocument.instruction.md +683 -0
- package/esm/src/guidelines/modelService/modelService.instruction.md +935 -0
- package/esm/src/guidelines/modelSignal/modelSignal.instruction.md +588 -0
- package/esm/src/guidelines/modelStore/modelStore.instruction.md +591 -0
- package/esm/src/guidelines/modelTemplate/modelTemplate.instruction.md +577 -0
- package/esm/src/guidelines/modelUnit/modelUnit.instruction.md +833 -0
- package/esm/src/guidelines/modelUtil/modelUtil.instruction.md +752 -0
- package/esm/src/guidelines/modelView/modelView.instruction.md +1005 -0
- package/esm/src/guidelines/modelZone/modelZone.instruction.md +528 -0
- package/esm/src/guidelines/scalarConstant/scalarConstant.instruction.md +489 -0
- package/esm/src/guidelines/scalarDictionary/scalarDictionary.instruction.md +347 -0
- package/esm/src/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +318 -0
- package/esm/src/guidelines/utilUiUsage/utilUiUsage.instruction.md +339 -0
- package/esm/src/templates/module/__model__.dictionary.js +4 -5
- package/package.json +3 -1
- package/src/guideline/guideline.command.d.ts +7 -0
- package/src/guideline/guideline.prompt.d.ts +15 -0
- package/src/guideline/guideline.runner.d.ts +5 -0
- package/src/guideline/guideline.script.d.ts +6 -0
- package/src/guidelines/___library/sharedUiStructureDescription.en.md +786 -0
- package/src/guidelines/___library/utilUiStructureDescription.en.md +395 -0
- package/src/guidelines/___lint/lintRuleDescription.en.md +64 -0
- package/src/guidelines/___module/moduleStructureDescription.en.md +80 -0
- package/src/guidelines/componentRule/componentRule.instruction.md +732 -0
- package/src/guidelines/databaseModule/databaseModule.instruction.md +691 -0
- package/src/guidelines/enumConstant/enumConstant.instruction.md +232 -0
- package/src/guidelines/fieldDecorator/fieldDecorator.instruction.md +611 -0
- package/src/guidelines/framework/framework.instruction.md +1112 -0
- package/src/guidelines/modelConstant/modelConstant.instruction.md +958 -0
- package/src/guidelines/modelDictionary/modelDictionary.instruction.md +583 -0
- package/src/guidelines/modelDocument/modelDocument.instruction.md +683 -0
- package/src/guidelines/modelService/modelService.instruction.md +935 -0
- package/src/guidelines/modelSignal/modelSignal.instruction.md +588 -0
- package/src/guidelines/modelStore/modelStore.instruction.md +591 -0
- package/src/guidelines/modelTemplate/modelTemplate.instruction.md +577 -0
- package/src/guidelines/modelUnit/modelUnit.instruction.md +833 -0
- package/src/guidelines/modelUtil/modelUtil.instruction.md +752 -0
- package/src/guidelines/modelView/modelView.instruction.md +1005 -0
- package/src/guidelines/modelZone/modelZone.instruction.md +528 -0
- package/src/guidelines/scalarConstant/scalarConstant.instruction.md +489 -0
- package/src/guidelines/scalarDictionary/scalarDictionary.instruction.md +347 -0
- package/src/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +318 -0
- package/src/guidelines/utilUiUsage/utilUiUsage.instruction.md +339 -0
- package/src/module/module.command.d.ts +6 -8
- package/src/module/module.prompt.d.ts +2 -15
- package/src/module/module.request.d.ts +22 -18
- package/src/module/module.runner.d.ts +4 -20
- package/src/module/module.script.d.ts +6 -7
- package/src/scalar/scalar.command.d.ts +7 -0
- package/src/scalar/scalar.prompt.d.ts +23 -0
- package/src/scalar/scalar.runner.d.ts +13 -0
- package/src/scalar/scalar.script.d.ts +6 -0
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(public)/forgotpassword/page.js +0 -47
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(public)/page.js +0 -128
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(public)/privacy/page.js +0 -42
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(public)/signin/page.js +0 -50
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(public)/termsofservice/page.js +0 -41
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(public)/unknown/page.js +0 -51
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(user)/layout.js +0 -43
- package/cjs/src/templates/app/app/[lang]/(__appName__)/(user)/self/page.js +0 -60
- package/cjs/src/templates/app/app/[lang]/(__appName__)/layout.js +0 -54
- package/cjs/src/templates/app/app/[lang]/(__appName__)/styles.css.template +0 -19
- package/cjs/src/templates/app/app/[lang]/admin/layout.js +0 -54
- package/cjs/src/templates/app/app/[lang]/admin/page.js +0 -63
- package/cjs/src/templates/app/app/csr.js +0 -34
- package/cjs/src/templates/app/app/index.html.template +0 -13
- package/cjs/src/templates/app/app/layout.js +0 -38
- package/cjs/src/templates/app/capacitor.config.ts.template +0 -8
- package/cjs/src/templates/app/env/env.client.debug.ts.template +0 -7
- package/cjs/src/templates/app/env/env.client.develop.ts.template +0 -7
- package/cjs/src/templates/app/env/env.client.local.ts.template +0 -7
- package/cjs/src/templates/app/env/env.client.main.ts.template +0 -7
- package/cjs/src/templates/app/env/env.client.testing.ts.template +0 -7
- package/cjs/src/templates/app/env/env.server.debug.ts.template +0 -15
- package/cjs/src/templates/app/env/env.server.develop.ts.template +0 -15
- package/cjs/src/templates/app/env/env.server.local.ts.template +0 -15
- package/cjs/src/templates/app/env/env.server.main.ts.template +0 -15
- package/cjs/src/templates/app/env/env.server.testing.ts.template +0 -7
- package/cjs/src/templates/app/lib/setting/Setting.Template.js +0 -57
- package/cjs/src/templates/app/lib/setting/Setting.Unit.js +0 -38
- package/cjs/src/templates/app/lib/setting/Setting.Util.js +0 -34
- package/cjs/src/templates/app/lib/setting/Setting.View.js +0 -51
- package/cjs/src/templates/app/lib/setting/Setting.Zone.js +0 -80
- package/cjs/src/templates/app/lib/setting/index.js +0 -61
- package/cjs/src/templates/app/lib/summary/Summary.Template.js +0 -43
- package/cjs/src/templates/app/lib/summary/Summary.Unit.js +0 -38
- package/cjs/src/templates/app/lib/summary/Summary.Util.js +0 -33
- package/cjs/src/templates/app/lib/summary/Summary.View.js +0 -51
- package/cjs/src/templates/app/lib/summary/Summary.Zone.js +0 -62
- package/cjs/src/templates/app/lib/summary/index.js +0 -67
- package/cjs/src/templates/app/lib/user/User.Template.js +0 -65
- package/cjs/src/templates/app/lib/user/User.Unit.js +0 -38
- package/cjs/src/templates/app/lib/user/User.Util.js +0 -94
- package/cjs/src/templates/app/lib/user/User.View.js +0 -66
- package/cjs/src/templates/app/lib/user/User.Zone.js +0 -74
- package/cjs/src/templates/app/lib/user/index.js +0 -61
- package/cjs/src/templates/app/page.test.ts.template +0 -10
- package/cjs/src/templates/app/playwright.config.ts.template +0 -6
- package/cjs/src/templates/app/postcss.config.js.template +0 -10
- package/cjs/src/templates/app/public/manifest.json.template +0 -67
- package/cjs/src/templates/app/tsconfig.json.template +0 -22
- package/cjs/src/templates/app/tsconfig.spec.json.template +0 -7
- package/cjs/src/templates/app/ui/Footer.js +0 -67
- package/cjs/src/templates/app/ui/MainHeader.js +0 -131
- package/cjs/src/templates/crudPages/[__model__Id]/edit/page.js +0 -73
- package/cjs/src/templates/crudPages/[__model__Id]/page.js +0 -83
- package/cjs/src/templates/crudPages/new/page.js +0 -70
- package/cjs/src/templates/crudPages/page.js +0 -71
- package/cjs/src/templates/libRoot/.gitignore.template +0 -15
- package/cjs/src/templates/libRoot/env/env.server.example.ts.template +0 -7
- package/cjs/src/templates/libRoot/env/env.server.testing.ts.template +0 -7
- package/cjs/src/templates/libRoot/lib/setting/Setting.Template.js +0 -57
- package/cjs/src/templates/libRoot/lib/setting/Setting.Unit.js +0 -38
- package/cjs/src/templates/libRoot/lib/setting/Setting.Util.js +0 -34
- package/cjs/src/templates/libRoot/lib/setting/Setting.View.js +0 -51
- package/cjs/src/templates/libRoot/lib/setting/Setting.Zone.js +0 -80
- package/cjs/src/templates/libRoot/lib/setting/index.js +0 -61
- package/cjs/src/templates/libRoot/lib/summary/Summary.Template.js +0 -43
- package/cjs/src/templates/libRoot/lib/summary/Summary.Unit.js +0 -38
- package/cjs/src/templates/libRoot/lib/summary/Summary.Util.js +0 -33
- package/cjs/src/templates/libRoot/lib/summary/Summary.View.js +0 -51
- package/cjs/src/templates/libRoot/lib/summary/Summary.Zone.js +0 -62
- package/cjs/src/templates/libRoot/lib/summary/index.js +0 -67
- package/cjs/src/templates/libRoot/lib/user/User.Template.js +0 -65
- package/cjs/src/templates/libRoot/lib/user/User.Unit.js +0 -38
- package/cjs/src/templates/libRoot/lib/user/User.Util.js +0 -94
- package/cjs/src/templates/libRoot/lib/user/User.View.js +0 -66
- package/cjs/src/templates/libRoot/lib/user/User.Zone.js +0 -74
- package/cjs/src/templates/libRoot/lib/user/index.js +0 -61
- package/cjs/src/templates/libRoot/package.json.template +0 -4
- package/cjs/src/templates/libRoot/tsconfig.json.template +0 -13
- package/cjs/src/templates/libRoot/tsconfig.spec.json.template +0 -7
- package/cjs/src/templates/localDev/docker-compose.yaml.template +0 -36
- package/cjs/src/templates/module/__Model__.Template.js +0 -54
- package/cjs/src/templates/module/__Model__.Unit.js +0 -42
- package/cjs/src/templates/module/__Model__.Util.js +0 -70
- package/cjs/src/templates/module/__Model__.View.js +0 -48
- package/cjs/src/templates/module/__Model__.Zone.js +0 -83
- package/cjs/src/templates/module/index.js +0 -61
- package/cjs/src/templates/pkgRoot/tsconfig.json.template +0 -15
- package/cjs/src/templates/workspaceRoot/.env.template +0 -20
- package/cjs/src/templates/workspaceRoot/.gitignore.template +0 -118
- package/cjs/src/templates/workspaceRoot/.prettierignore.template +0 -10
- package/cjs/src/templates/workspaceRoot/.prettierrc.json.template +0 -6
- package/cjs/src/templates/workspaceRoot/.swcrc.template +0 -9
- package/cjs/src/templates/workspaceRoot/.vscode/settings.json.template +0 -13
- package/cjs/src/templates/workspaceRoot/README.md.template +0 -37
- package/cjs/src/templates/workspaceRoot/eslint.config.ts.template +0 -3
- package/cjs/src/templates/workspaceRoot/package.json.template +0 -43
- package/cjs/src/templates/workspaceRoot/tsconfig.json.template +0 -29
- package/esm/src/templates/app/app/[lang]/(__appName__)/(public)/forgotpassword/page.js +0 -27
- package/esm/src/templates/app/app/[lang]/(__appName__)/(public)/page.js +0 -108
- package/esm/src/templates/app/app/[lang]/(__appName__)/(public)/privacy/page.js +0 -22
- package/esm/src/templates/app/app/[lang]/(__appName__)/(public)/signin/page.js +0 -30
- package/esm/src/templates/app/app/[lang]/(__appName__)/(public)/termsofservice/page.js +0 -21
- package/esm/src/templates/app/app/[lang]/(__appName__)/(public)/unknown/page.js +0 -31
- package/esm/src/templates/app/app/[lang]/(__appName__)/(user)/layout.js +0 -23
- package/esm/src/templates/app/app/[lang]/(__appName__)/(user)/self/page.js +0 -40
- package/esm/src/templates/app/app/[lang]/(__appName__)/layout.js +0 -34
- package/esm/src/templates/app/app/[lang]/(__appName__)/styles.css.template +0 -19
- package/esm/src/templates/app/app/[lang]/admin/layout.js +0 -34
- package/esm/src/templates/app/app/[lang]/admin/page.js +0 -43
- package/esm/src/templates/app/app/csr.js +0 -14
- package/esm/src/templates/app/app/index.html.template +0 -13
- package/esm/src/templates/app/app/layout.js +0 -18
- package/esm/src/templates/app/capacitor.config.ts.template +0 -8
- package/esm/src/templates/app/env/env.client.debug.ts.template +0 -7
- package/esm/src/templates/app/env/env.client.develop.ts.template +0 -7
- package/esm/src/templates/app/env/env.client.local.ts.template +0 -7
- package/esm/src/templates/app/env/env.client.main.ts.template +0 -7
- package/esm/src/templates/app/env/env.client.testing.ts.template +0 -7
- package/esm/src/templates/app/env/env.server.debug.ts.template +0 -15
- package/esm/src/templates/app/env/env.server.develop.ts.template +0 -15
- package/esm/src/templates/app/env/env.server.local.ts.template +0 -15
- package/esm/src/templates/app/env/env.server.main.ts.template +0 -15
- package/esm/src/templates/app/env/env.server.testing.ts.template +0 -7
- package/esm/src/templates/app/lib/setting/Setting.Template.js +0 -37
- package/esm/src/templates/app/lib/setting/Setting.Unit.js +0 -18
- package/esm/src/templates/app/lib/setting/Setting.Util.js +0 -14
- package/esm/src/templates/app/lib/setting/Setting.View.js +0 -31
- package/esm/src/templates/app/lib/setting/Setting.Zone.js +0 -60
- package/esm/src/templates/app/lib/setting/index.js +0 -41
- package/esm/src/templates/app/lib/summary/Summary.Template.js +0 -23
- package/esm/src/templates/app/lib/summary/Summary.Unit.js +0 -18
- package/esm/src/templates/app/lib/summary/Summary.Util.js +0 -13
- package/esm/src/templates/app/lib/summary/Summary.View.js +0 -31
- package/esm/src/templates/app/lib/summary/Summary.Zone.js +0 -42
- package/esm/src/templates/app/lib/summary/index.js +0 -47
- package/esm/src/templates/app/lib/user/User.Template.js +0 -45
- package/esm/src/templates/app/lib/user/User.Unit.js +0 -18
- package/esm/src/templates/app/lib/user/User.Util.js +0 -74
- package/esm/src/templates/app/lib/user/User.View.js +0 -46
- package/esm/src/templates/app/lib/user/User.Zone.js +0 -54
- package/esm/src/templates/app/lib/user/index.js +0 -41
- package/esm/src/templates/app/page.test.ts.template +0 -10
- package/esm/src/templates/app/playwright.config.ts.template +0 -6
- package/esm/src/templates/app/postcss.config.js.template +0 -10
- package/esm/src/templates/app/public/manifest.json.template +0 -67
- package/esm/src/templates/app/tsconfig.json.template +0 -22
- package/esm/src/templates/app/tsconfig.spec.json.template +0 -7
- package/esm/src/templates/app/ui/Footer.js +0 -47
- package/esm/src/templates/app/ui/MainHeader.js +0 -111
- package/esm/src/templates/crudPages/[__model__Id]/edit/page.js +0 -53
- package/esm/src/templates/crudPages/[__model__Id]/page.js +0 -63
- package/esm/src/templates/crudPages/new/page.js +0 -50
- package/esm/src/templates/crudPages/page.js +0 -51
- package/esm/src/templates/libRoot/.gitignore.template +0 -15
- package/esm/src/templates/libRoot/env/env.server.example.ts.template +0 -7
- package/esm/src/templates/libRoot/env/env.server.testing.ts.template +0 -7
- package/esm/src/templates/libRoot/lib/setting/Setting.Template.js +0 -37
- package/esm/src/templates/libRoot/lib/setting/Setting.Unit.js +0 -18
- package/esm/src/templates/libRoot/lib/setting/Setting.Util.js +0 -14
- package/esm/src/templates/libRoot/lib/setting/Setting.View.js +0 -31
- package/esm/src/templates/libRoot/lib/setting/Setting.Zone.js +0 -60
- package/esm/src/templates/libRoot/lib/setting/index.js +0 -41
- package/esm/src/templates/libRoot/lib/summary/Summary.Template.js +0 -23
- package/esm/src/templates/libRoot/lib/summary/Summary.Unit.js +0 -18
- package/esm/src/templates/libRoot/lib/summary/Summary.Util.js +0 -13
- package/esm/src/templates/libRoot/lib/summary/Summary.View.js +0 -31
- package/esm/src/templates/libRoot/lib/summary/Summary.Zone.js +0 -42
- package/esm/src/templates/libRoot/lib/summary/index.js +0 -47
- package/esm/src/templates/libRoot/lib/user/User.Template.js +0 -45
- package/esm/src/templates/libRoot/lib/user/User.Unit.js +0 -18
- package/esm/src/templates/libRoot/lib/user/User.Util.js +0 -74
- package/esm/src/templates/libRoot/lib/user/User.View.js +0 -46
- package/esm/src/templates/libRoot/lib/user/User.Zone.js +0 -54
- package/esm/src/templates/libRoot/lib/user/index.js +0 -41
- package/esm/src/templates/libRoot/package.json.template +0 -4
- package/esm/src/templates/libRoot/tsconfig.json.template +0 -13
- package/esm/src/templates/libRoot/tsconfig.spec.json.template +0 -7
- package/esm/src/templates/localDev/docker-compose.yaml.template +0 -36
- package/esm/src/templates/module/__Model__.Template.js +0 -34
- package/esm/src/templates/module/__Model__.Unit.js +0 -22
- package/esm/src/templates/module/__Model__.Util.js +0 -50
- package/esm/src/templates/module/__Model__.View.js +0 -28
- package/esm/src/templates/module/__Model__.Zone.js +0 -63
- package/esm/src/templates/module/index.js +0 -41
- package/esm/src/templates/pkgRoot/tsconfig.json.template +0 -15
- package/esm/src/templates/workspaceRoot/.env.template +0 -20
- package/esm/src/templates/workspaceRoot/.gitignore.template +0 -118
- package/esm/src/templates/workspaceRoot/.prettierignore.template +0 -10
- package/esm/src/templates/workspaceRoot/.prettierrc.json.template +0 -6
- package/esm/src/templates/workspaceRoot/.swcrc.template +0 -9
- package/esm/src/templates/workspaceRoot/.vscode/settings.json.template +0 -13
- package/esm/src/templates/workspaceRoot/README.md.template +0 -37
- package/esm/src/templates/workspaceRoot/eslint.config.ts.template +0 -3
- package/esm/src/templates/workspaceRoot/package.json.template +0 -43
- package/esm/src/templates/workspaceRoot/tsconfig.json.template +0 -29
- package/src/application/application.prompt.d.ts +0 -2
- package/src/templates/app/app/[lang]/(__appName__)/(public)/forgotpassword/page.d.ts +0 -9
- package/src/templates/app/app/[lang]/(__appName__)/(public)/page.d.ts +0 -9
- package/src/templates/app/app/[lang]/(__appName__)/(public)/privacy/page.d.ts +0 -9
- package/src/templates/app/app/[lang]/(__appName__)/(public)/signin/page.d.ts +0 -9
- package/src/templates/app/app/[lang]/(__appName__)/(public)/termsofservice/page.d.ts +0 -10
- package/src/templates/app/app/[lang]/(__appName__)/(public)/unknown/page.d.ts +0 -9
- package/src/templates/app/app/[lang]/(__appName__)/(user)/layout.d.ts +0 -9
- package/src/templates/app/app/[lang]/(__appName__)/(user)/self/page.d.ts +0 -9
- package/src/templates/app/app/[lang]/(__appName__)/layout.d.ts +0 -9
- package/src/templates/app/app/[lang]/admin/layout.d.ts +0 -9
- package/src/templates/app/app/[lang]/admin/page.d.ts +0 -9
- package/src/templates/app/app/csr.d.ts +0 -9
- package/src/templates/app/app/layout.d.ts +0 -9
- package/src/templates/app/lib/setting/Setting.Template.d.ts +0 -9
- package/src/templates/app/lib/setting/Setting.Unit.d.ts +0 -9
- package/src/templates/app/lib/setting/Setting.Util.d.ts +0 -9
- package/src/templates/app/lib/setting/Setting.View.d.ts +0 -9
- package/src/templates/app/lib/setting/Setting.Zone.d.ts +0 -9
- package/src/templates/app/lib/setting/index.d.ts +0 -9
- package/src/templates/app/lib/summary/Summary.Template.d.ts +0 -9
- package/src/templates/app/lib/summary/Summary.Unit.d.ts +0 -9
- package/src/templates/app/lib/summary/Summary.Util.d.ts +0 -9
- package/src/templates/app/lib/summary/Summary.View.d.ts +0 -9
- package/src/templates/app/lib/summary/Summary.Zone.d.ts +0 -9
- package/src/templates/app/lib/summary/index.d.ts +0 -9
- package/src/templates/app/lib/user/User.Template.d.ts +0 -9
- package/src/templates/app/lib/user/User.Unit.d.ts +0 -9
- package/src/templates/app/lib/user/User.Util.d.ts +0 -9
- package/src/templates/app/lib/user/User.View.d.ts +0 -9
- package/src/templates/app/lib/user/User.Zone.d.ts +0 -9
- package/src/templates/app/lib/user/index.d.ts +0 -9
- package/src/templates/app/ui/Footer.d.ts +0 -9
- package/src/templates/app/ui/MainHeader.d.ts +0 -10
- package/src/templates/crudPages/[__model__Id]/edit/page.d.ts +0 -11
- package/src/templates/crudPages/[__model__Id]/page.d.ts +0 -11
- package/src/templates/crudPages/new/page.d.ts +0 -11
- package/src/templates/crudPages/page.d.ts +0 -11
- package/src/templates/libRoot/lib/setting/Setting.Template.d.ts +0 -9
- package/src/templates/libRoot/lib/setting/Setting.Unit.d.ts +0 -9
- package/src/templates/libRoot/lib/setting/Setting.Util.d.ts +0 -9
- package/src/templates/libRoot/lib/setting/Setting.View.d.ts +0 -9
- package/src/templates/libRoot/lib/setting/Setting.Zone.d.ts +0 -9
- package/src/templates/libRoot/lib/setting/index.d.ts +0 -9
- package/src/templates/libRoot/lib/summary/Summary.Template.d.ts +0 -9
- package/src/templates/libRoot/lib/summary/Summary.Unit.d.ts +0 -9
- package/src/templates/libRoot/lib/summary/Summary.Util.d.ts +0 -9
- package/src/templates/libRoot/lib/summary/Summary.View.d.ts +0 -9
- package/src/templates/libRoot/lib/summary/Summary.Zone.d.ts +0 -9
- package/src/templates/libRoot/lib/summary/index.d.ts +0 -9
- package/src/templates/libRoot/lib/user/User.Template.d.ts +0 -9
- package/src/templates/libRoot/lib/user/User.Unit.d.ts +0 -9
- package/src/templates/libRoot/lib/user/User.Util.d.ts +0 -9
- package/src/templates/libRoot/lib/user/User.View.d.ts +0 -9
- package/src/templates/libRoot/lib/user/User.Zone.d.ts +0 -9
- package/src/templates/libRoot/lib/user/index.d.ts +0 -9
- package/src/templates/module/__Model__.Template.d.ts +0 -11
- package/src/templates/module/__Model__.Unit.d.ts +0 -11
- package/src/templates/module/__Model__.Util.d.ts +0 -11
- package/src/templates/module/__Model__.View.d.ts +0 -11
- package/src/templates/module/__Model__.Zone.d.ts +0 -11
- package/src/templates/module/index.d.ts +0 -11
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
# Scalar Constant Implementation Guide for Akan.js
|
|
2
|
+
|
|
3
|
+
## Purpose of Scalar Constants
|
|
4
|
+
|
|
5
|
+
Scalar constants in Akan.js serve as the foundation for complex data modeling by:
|
|
6
|
+
|
|
7
|
+
- Defining reusable value objects that can be embedded in other models
|
|
8
|
+
- Representing complex data types without creating database collections
|
|
9
|
+
- Providing standardized field definitions across the application
|
|
10
|
+
- Enabling type-safe data modeling and validation
|
|
11
|
+
- Serving as building blocks for larger domain models
|
|
12
|
+
|
|
13
|
+
## File Structure and Location
|
|
14
|
+
|
|
15
|
+
### Location Convention
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
{app,lib}/
|
|
19
|
+
└── */lib/__scalar/
|
|
20
|
+
└── <scalarName>/ // camelCase directory
|
|
21
|
+
└── <scalarName>.constant.ts // scalar definition file
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Naming Standards
|
|
25
|
+
|
|
26
|
+
- **Directory**: `camelCase` (e.g., `geoLocation`)
|
|
27
|
+
- **File**: `<scalarName>.constant.ts` (matches directory name)
|
|
28
|
+
- **Class**: `PascalCase` matching directory name (e.g., `GeoLocation`)
|
|
29
|
+
- **Model Reference**: Matches class name in `@Model.Scalar()` decorator
|
|
30
|
+
- **Enum Values**: `camelCase` (e.g., `active`, `pendingApproval`)
|
|
31
|
+
|
|
32
|
+
### File Structure
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
// 1. Core imports
|
|
36
|
+
import { Float, Int, String, Boolean, Date, type Dayjs, dayjs, enumOf } from "@akanjs/base";
|
|
37
|
+
import { Field, Model } from "@akanjs/constant";
|
|
38
|
+
|
|
39
|
+
// 2. Optional enum definitions (camelCase values)
|
|
40
|
+
export const Status = enumOf(["active", "inactive"] as const);
|
|
41
|
+
export type Status = enumOf<typeof Status>;
|
|
42
|
+
|
|
43
|
+
// 3. Scalar model class (SINGLE CLASS PER FILE)
|
|
44
|
+
@Model.Scalar("ScalarName") // Must match class name
|
|
45
|
+
export class ScalarName {
|
|
46
|
+
// Field definitions
|
|
47
|
+
@Field.Prop(() => FieldType, { ...options })
|
|
48
|
+
fieldName: FieldType;
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Required Imports
|
|
53
|
+
|
|
54
|
+
### Essential Framework Imports
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
import { Field, Model } from "@akanjs/constant";
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Common Base Types
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
import { ID, Int, Float, String, Boolean, Date, type Dayjs, dayjs, enumOf, JSON, Map } from "@akanjs/base";
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Cross-Scalar References
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
import { OtherScalar } from "../other-scalar/other-scalar.constant";
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Model Definition
|
|
73
|
+
|
|
74
|
+
### Basic Structure
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
@Model.Scalar("ScalarName") // String must match class name
|
|
78
|
+
export class ScalarName {
|
|
79
|
+
// Field definitions go here
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Key Rules
|
|
84
|
+
|
|
85
|
+
- **One scalar model per file** - Create separate files for different scalars
|
|
86
|
+
- **Class name matches directory name** in PascalCase (e.g., `PaymentInfo` for `payment-info`)
|
|
87
|
+
- **Model names should be domain-specific** and descriptive
|
|
88
|
+
- **No ID/timestamp fields** - Scalars are value objects, not entities
|
|
89
|
+
- **`@Model.Scalar` decorator parameter must match class name** - This is critical for proper metadata registration
|
|
90
|
+
|
|
91
|
+
## Field Definitions
|
|
92
|
+
|
|
93
|
+
### Basic Field Types
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
@Field.Prop(() => String)
|
|
97
|
+
name: string;
|
|
98
|
+
|
|
99
|
+
@Field.Prop(() => Int)
|
|
100
|
+
quantity: number;
|
|
101
|
+
|
|
102
|
+
@Field.Prop(() => Float)
|
|
103
|
+
percentage: number;
|
|
104
|
+
|
|
105
|
+
@Field.Prop(() => Boolean)
|
|
106
|
+
isActive: boolean;
|
|
107
|
+
|
|
108
|
+
@Field.Prop(() => Date)
|
|
109
|
+
timestamp: Dayjs; // Always use Dayjs for dates
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Field Options Reference
|
|
113
|
+
|
|
114
|
+
| Option | Type | Description | Example |
|
|
115
|
+
| ----------- | -------- | ------------------------------------ | ---------------------------- |
|
|
116
|
+
| `default` | Any | Default field value | `{ default: 0 }` |
|
|
117
|
+
| `nullable` | Boolean | Allows null values | `{ nullable: true }` |
|
|
118
|
+
| `enum` | Enum | Restricts to enum values | `{ enum: Status }` |
|
|
119
|
+
| `min` | Number | Minimum numeric value | `{ min: 0 }` |
|
|
120
|
+
| `max` | Number | Maximum numeric value | `{ max: 100 }` |
|
|
121
|
+
| `minlength` | Number | Minimum string length | `{ minlength: 3 }` |
|
|
122
|
+
| `maxlength` | Number | Maximum string length | `{ maxlength: 255 }` |
|
|
123
|
+
| `example` | Any | Example value for documentation | `{ example: [0,0] }` |
|
|
124
|
+
| `validate` | Function | Custom validation function | `{ validate: (v) => v > 0 }` |
|
|
125
|
+
| `immutable` | Boolean | Prevents modification after creation | `{ immutable: true }` |
|
|
126
|
+
| `select` | Boolean | Includes in query results by default | `{ select: false }` |
|
|
127
|
+
| `text` | String | Enables text search capabilities | `{ text: "search" }` |
|
|
128
|
+
|
|
129
|
+
### Special Field Types
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
// Hidden field (not exposed in GraphQL)
|
|
133
|
+
@Field.Hidden(() => String)
|
|
134
|
+
internalCode: string;
|
|
135
|
+
|
|
136
|
+
// Secret field (not selected by default)
|
|
137
|
+
@Field.Secret(() => String)
|
|
138
|
+
apiKey: string;
|
|
139
|
+
|
|
140
|
+
// Resolve field (computed at runtime)
|
|
141
|
+
@Field.Resolve(() => Int)
|
|
142
|
+
get total(): number {
|
|
143
|
+
return this.items.length;
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Array Fields
|
|
148
|
+
|
|
149
|
+
### Simple Arrays
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
// String array
|
|
153
|
+
@Field.Prop(() => [String])
|
|
154
|
+
tags: string[];
|
|
155
|
+
|
|
156
|
+
// Number array with default
|
|
157
|
+
@Field.Prop(() => [Int], { default: [1, 2, 3] })
|
|
158
|
+
values: number[];
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Nested Arrays
|
|
162
|
+
|
|
163
|
+
```typescript
|
|
164
|
+
// 2D number array
|
|
165
|
+
@Field.Prop(() => [[Int]])
|
|
166
|
+
matrix: number[][];
|
|
167
|
+
|
|
168
|
+
// 3D coordinate array
|
|
169
|
+
@Field.Prop(() => [[[Float]]])
|
|
170
|
+
coordinates: number[][][];
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Array of Scalars
|
|
174
|
+
|
|
175
|
+
```typescript
|
|
176
|
+
@Field.Prop(() => [OtherScalar])
|
|
177
|
+
items: OtherScalar[];
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Map Fields
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
@Field.Prop(() => Map, {
|
|
184
|
+
of: String, // Must specify value type
|
|
185
|
+
default: new Map()
|
|
186
|
+
})
|
|
187
|
+
metadata: Map<string, string>;
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Enum Implementation (camelCase Values)
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
// Define enum with camelCase values (export REQUIRED)
|
|
194
|
+
export const Status = enumOf(["active", "inactive", "pendingApproval"] as const);
|
|
195
|
+
export type Status = enumOf<typeof Status>; // Type export
|
|
196
|
+
|
|
197
|
+
// Use in field
|
|
198
|
+
@Field.Prop(() => String, {
|
|
199
|
+
enum: Status,
|
|
200
|
+
default: "active"
|
|
201
|
+
})
|
|
202
|
+
status: Status;
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Static Methods
|
|
206
|
+
|
|
207
|
+
Scalar classes can include static methods for common operations on the scalar type:
|
|
208
|
+
|
|
209
|
+
```typescript
|
|
210
|
+
@Model.Scalar("Coordinate")
|
|
211
|
+
export class Coordinate {
|
|
212
|
+
@Field.Prop(() => [Float], { default: [0, 0] })
|
|
213
|
+
coordinates: number[];
|
|
214
|
+
|
|
215
|
+
// Static utility methods
|
|
216
|
+
static getDistanceKm(loc1: Coordinate, loc2: Coordinate) {
|
|
217
|
+
const [lon1, lat1] = loc1.coordinates;
|
|
218
|
+
const [lon2, lat2] = loc2.coordinates;
|
|
219
|
+
// Distance calculation logic
|
|
220
|
+
return distance;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Validation Rules and Checklist
|
|
226
|
+
|
|
227
|
+
### File-Level Validation
|
|
228
|
+
|
|
229
|
+
- [ ] Location: `__scalar/<camelCase>/<camelCase>.constant.ts`
|
|
230
|
+
- [ ] Single `@Model.Scalar` class per file
|
|
231
|
+
- [ ] Class name matches directory name (PascalCase)
|
|
232
|
+
- [ ] All required imports present
|
|
233
|
+
- [ ] The string passed to `@Model.Scalar()` must match the class name exactly
|
|
234
|
+
|
|
235
|
+
### Field-Level Validation
|
|
236
|
+
|
|
237
|
+
- [ ] All fields have `@Field.Prop` decorator (or `@Field.Hidden`, `@Field.Secret`, `@Field.Resolve`)
|
|
238
|
+
- [ ] Type references use arrow functions: `() => Type`
|
|
239
|
+
- [ ] Array types use bracket notation: `[Type]`
|
|
240
|
+
- [ ] Nullable fields use TypeScript union: `Type | null`
|
|
241
|
+
- [ ] Default values match field types
|
|
242
|
+
- [ ] Enums are properly defined with camelCase values and exported
|
|
243
|
+
- [ ] Custom validation functions are pure and side-effect free
|
|
244
|
+
- [ ] Dayjs type is used for date fields
|
|
245
|
+
|
|
246
|
+
### Best Practices
|
|
247
|
+
|
|
248
|
+
- **Focused models**: Each scalar should represent a single concept
|
|
249
|
+
- **Descriptive names**: Use clear, domain-relevant terminology
|
|
250
|
+
- **Enum Values**: Always use camelCase (`active`, not `ACTIVE`)
|
|
251
|
+
- **Reusability**: Create separate scalars for commonly used structures
|
|
252
|
+
- **Documentation**: Add comments for complex fields
|
|
253
|
+
- **Validation**: Use min/max for numbers, minlength/maxlength for text
|
|
254
|
+
- **Immutability**: Mark fields as `immutable` where appropriate
|
|
255
|
+
- **Default values**: Provide sensible defaults for most fields
|
|
256
|
+
|
|
257
|
+
## Common Mistakes and Fixes
|
|
258
|
+
|
|
259
|
+
### Incorrect Enum Case
|
|
260
|
+
|
|
261
|
+
```typescript
|
|
262
|
+
// ❌ Wrong (uppercase values)
|
|
263
|
+
export const Status = enumOf(["ACTIVE", "INACTIVE"] as const);
|
|
264
|
+
|
|
265
|
+
// ✅ Correct (camelCase values)
|
|
266
|
+
export const Status = enumOf(["active", "inactive"] as const);
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Incorrect Array Syntax
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
// ❌ Wrong
|
|
273
|
+
@Field.Prop(() => Array<Int>)
|
|
274
|
+
values: number[];
|
|
275
|
+
|
|
276
|
+
// ✅ Correct
|
|
277
|
+
@Field.Prop(() => [Int])
|
|
278
|
+
values: number[];
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Missing Nullable Type Declaration
|
|
282
|
+
|
|
283
|
+
```typescript
|
|
284
|
+
// ❌ Wrong (type mismatch)
|
|
285
|
+
@Field.Prop(() => String, { nullable: true })
|
|
286
|
+
description: string;
|
|
287
|
+
|
|
288
|
+
// ✅ Correct
|
|
289
|
+
@Field.Prop(() => String, { nullable: true })
|
|
290
|
+
description: string | null;
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### Improper Enum Implementation
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
// ❌ Wrong (missing export/type)
|
|
297
|
+
const Status = enumOf(["active"] as const);
|
|
298
|
+
|
|
299
|
+
// ✅ Correct
|
|
300
|
+
export const Status = enumOf(["active"] as const);
|
|
301
|
+
export type Status = enumOf<typeof Status>;
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### Multiple Models in One File
|
|
305
|
+
|
|
306
|
+
```typescript
|
|
307
|
+
// ❌ Wrong (violates single-responsibility)
|
|
308
|
+
@Model.Scalar("Address") class Address { ... }
|
|
309
|
+
@Model.Scalar("User") class User { ... }
|
|
310
|
+
|
|
311
|
+
// ✅ Correct (separate files)
|
|
312
|
+
// address.constant.ts
|
|
313
|
+
export class Address { ... }
|
|
314
|
+
|
|
315
|
+
// user.constant.ts
|
|
316
|
+
import { Address } from "../address/address.constant";
|
|
317
|
+
export class User { ... }
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Incorrect Date Handling
|
|
321
|
+
|
|
322
|
+
```typescript
|
|
323
|
+
// ❌ Wrong (uses native Date)
|
|
324
|
+
@Field.Prop(() => Date)
|
|
325
|
+
createdAt: Date;
|
|
326
|
+
|
|
327
|
+
// ✅ Correct (uses Dayjs)
|
|
328
|
+
import { type Dayjs } from "@akanjs/base";
|
|
329
|
+
|
|
330
|
+
@Field.Prop(() => Date)
|
|
331
|
+
createdAt: Dayjs;
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### Missing Model.Scalar Parameter
|
|
335
|
+
|
|
336
|
+
```typescript
|
|
337
|
+
// ❌ Wrong (missing or mismatched parameter)
|
|
338
|
+
@Model.Scalar()
|
|
339
|
+
export class GeoLocation { ... }
|
|
340
|
+
|
|
341
|
+
// ✅ Correct
|
|
342
|
+
@Model.Scalar("GeoLocation")
|
|
343
|
+
export class GeoLocation { ... }
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
## Full Examples
|
|
347
|
+
|
|
348
|
+
### Basic Scalar Example
|
|
349
|
+
|
|
350
|
+
```typescript
|
|
351
|
+
// libs/payment/lib/__scalar/amount/amount.constant.ts
|
|
352
|
+
import { Float } from "@akanjs/base";
|
|
353
|
+
import { Field, Model } from "@akanjs/constant";
|
|
354
|
+
|
|
355
|
+
@Model.Scalar("Amount")
|
|
356
|
+
export class Amount {
|
|
357
|
+
@Field.Prop(() => Float, { min: 0, default: 0 })
|
|
358
|
+
value: number;
|
|
359
|
+
|
|
360
|
+
@Field.Prop(() => String, { default: "USD" })
|
|
361
|
+
currency: string;
|
|
362
|
+
}
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
### Complex Scalar Example (with camelCase enums)
|
|
366
|
+
|
|
367
|
+
```typescript
|
|
368
|
+
// apps/maps/lib/__scalar/geoLocation/geoLocation.constant.ts
|
|
369
|
+
import { Float, type Dayjs, dayjs, enumOf } from "@akanjs/base";
|
|
370
|
+
import { Field, Model } from "@akanjs/constant";
|
|
371
|
+
|
|
372
|
+
// CORRECT: camelCase enum values
|
|
373
|
+
export const AccuracyLevel = enumOf(["low", "medium", "high"] as const);
|
|
374
|
+
export type AccuracyLevel = enumOf<typeof AccuracyLevel>;
|
|
375
|
+
|
|
376
|
+
@Model.Scalar("GeoLocation")
|
|
377
|
+
export class GeoLocation {
|
|
378
|
+
@Field.Prop(() => Float, {
|
|
379
|
+
min: -90,
|
|
380
|
+
max: 90,
|
|
381
|
+
example: 37.7749,
|
|
382
|
+
})
|
|
383
|
+
latitude: number;
|
|
384
|
+
|
|
385
|
+
@Field.Prop(() => Float, {
|
|
386
|
+
min: -180,
|
|
387
|
+
max: 180,
|
|
388
|
+
example: -122.4194,
|
|
389
|
+
})
|
|
390
|
+
longitude: number;
|
|
391
|
+
|
|
392
|
+
@Field.Prop(() => Float, {
|
|
393
|
+
nullable: true,
|
|
394
|
+
min: 0,
|
|
395
|
+
example: 12.5,
|
|
396
|
+
})
|
|
397
|
+
elevation: number | null;
|
|
398
|
+
|
|
399
|
+
@Field.Prop(() => String, {
|
|
400
|
+
enum: AccuracyLevel,
|
|
401
|
+
default: "medium",
|
|
402
|
+
})
|
|
403
|
+
accuracy: AccuracyLevel;
|
|
404
|
+
|
|
405
|
+
@Field.Prop(() => Date, {
|
|
406
|
+
default: () => dayjs(),
|
|
407
|
+
immutable: true,
|
|
408
|
+
})
|
|
409
|
+
measuredAt: Dayjs;
|
|
410
|
+
}
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
### Scalar with Nested Objects
|
|
414
|
+
|
|
415
|
+
```typescript
|
|
416
|
+
// apps/ecommerce/lib/__scalar/product-spec/product-spec.constant.ts
|
|
417
|
+
import { Int, Float } from "@akanjs/base";
|
|
418
|
+
import { Field, Model } from "@akanjs/constant";
|
|
419
|
+
import { Dimension } from "../dimension/dimension.constant";
|
|
420
|
+
|
|
421
|
+
@Model.Scalar("ProductSpec")
|
|
422
|
+
export class ProductSpec {
|
|
423
|
+
@Field.Prop(() => String)
|
|
424
|
+
sku: string;
|
|
425
|
+
|
|
426
|
+
@Field.Prop(() => [String], {
|
|
427
|
+
default: [],
|
|
428
|
+
example: ["red", "blue"],
|
|
429
|
+
})
|
|
430
|
+
colors: string[];
|
|
431
|
+
|
|
432
|
+
@Field.Prop(() => Dimension)
|
|
433
|
+
size: Dimension;
|
|
434
|
+
|
|
435
|
+
@Field.Prop(() => Float, { min: 0 })
|
|
436
|
+
weight: number;
|
|
437
|
+
|
|
438
|
+
@Field.Prop(() => Int, {
|
|
439
|
+
min: 0,
|
|
440
|
+
default: 0,
|
|
441
|
+
})
|
|
442
|
+
stock: number;
|
|
443
|
+
}
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
### Scalar with Static Methods
|
|
447
|
+
|
|
448
|
+
```typescript
|
|
449
|
+
// libs/util/lib/__scalar/coordinate/coordinate.constant.ts
|
|
450
|
+
import { Float } from "@akanjs/base";
|
|
451
|
+
import { Field, Model } from "@akanjs/constant";
|
|
452
|
+
|
|
453
|
+
@Model.Scalar("Coordinate")
|
|
454
|
+
export class Coordinate {
|
|
455
|
+
@Field.Prop(() => [Float], { default: [0, 0], example: [127.114367, 37.497114] })
|
|
456
|
+
coordinates: number[];
|
|
457
|
+
|
|
458
|
+
@Field.Prop(() => Float, { default: 0 })
|
|
459
|
+
altitude: number;
|
|
460
|
+
|
|
461
|
+
static getDistanceKm(loc1: Coordinate, loc2: Coordinate) {
|
|
462
|
+
const [lon1, lat1] = loc1.coordinates;
|
|
463
|
+
const [lon2, lat2] = loc2.coordinates;
|
|
464
|
+
// Distance calculation logic...
|
|
465
|
+
return distance;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
static moveMeters(loc: Coordinate, x: number, y: number): Coordinate {
|
|
469
|
+
// Calculate new position...
|
|
470
|
+
return { ...loc, coordinates: [newLon, newLat] };
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
## Summary Checklist
|
|
476
|
+
|
|
477
|
+
1. **Location**: `__scalar/<camelCase>/<camelCase>.constant.ts`
|
|
478
|
+
2. **Structure**: Single `@Model.Scalar` class per file
|
|
479
|
+
3. **Naming**: Class name = PascalCase directory name
|
|
480
|
+
4. **Decorator**: `@Model.Scalar("ClassName")` with exact class name match
|
|
481
|
+
5. **Enum Values**: Always camelCase (`active`, not `ACTIVE`)
|
|
482
|
+
6. **Fields**: Use `@Field.Prop` with arrow function types
|
|
483
|
+
7. **Arrays**: Wrap in `[]` (e.g., `[Int]`)
|
|
484
|
+
8. **Enums**: Export with `enumOf` and derived type
|
|
485
|
+
9. **Dates**: Always use `Dayjs` type with `Date` decorator
|
|
486
|
+
10. **Nullability**: Use `| null` with `{ nullable: true }`
|
|
487
|
+
11. **Validation**: Implement field-level constraints
|
|
488
|
+
|
|
489
|
+
Following these patterns ensures type-safe, maintainable scalar definitions that integrate seamlessly with the Akan.js framework's data modeling layer.
|